def _do_process_task(self, subscriber, subscription, ack_id, message, done_event): """Process task with timeout.""" try: with self._ndb_client.context(): source_id = get_source_id(message) _state.source_id = source_id task_type = message.attributes['type'] if task_type in ('regressed', 'fixed'): oss_fuzz.process_bisect_task(self._oss_fuzz_dir, task_type, source_id, message) elif task_type == 'impact': try: oss_fuzz.process_impact_task(source_id, message) except osv.ImpactError: logging.error('Failed to process impact: %s', traceback.format_exc()) elif task_type == 'invalid': mark_bug_invalid(message) elif task_type == 'update': self._source_update(message) _state.source_id = None subscriber.acknowledge(subscription=subscription, ack_ids=[ack_id]) except Exception: logging.error('Unexpected exception while processing task: %s', traceback.format_exc()) subscriber.modify_ack_deadline(subscription=subscription, ack_ids=[ack_id], ack_deadline_seconds=0) finally: logging.info('Ending task') done_event.set()
def test_fixed_range_too_long(self): """Test fixed range that's too long.""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': 'OSV-2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit='eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() fix_result = osv.FixResult( id='oss-fuzz:123', commit=('eefe8ec3f1f90d0e684890e810f3f21e8500a4cd:' 'b587c21c36a84e16cfc6b39eb68578d43b5281ad'), repo_url='https://repo.com/repo', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) fix_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.expect_dict_equal( 'fixed_range_too_long', ndb.Key(osv.Bug, 'OSV-2020-1337').get()._to_dict()) affected_commits = list(osv.AffectedCommit.query()) self.assertCountEqual([ 'b9b3fd4732695b83c3068b7b6a14bb372ec31f98', 'ff8cc32ba60ad9cbb3b23f0a82aad96ebe9ff76b', 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', '4c155795426727ea05575bd5904321def23c03f4', 'b1c95a196f22d06fcf80df8c6691cd113d8fefff', 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', '3ea6feea9bb853596c727abab309476cc07d1505', '36f0bd9549298b44f9ff2496c9dd1326b3a9d0e2', ], [commit.commit for commit in affected_commits])
def test_zero_regression_range(self): """Test regression range with "0:X".""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': 'OSV-2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit='unknown:eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() fix_result = osv.FixResult( id='oss-fuzz:123', commit='8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', repo_url='https://repo.com/repo', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) fix_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.expect_dict_equal( 'zero_regression_range', ndb.Key(osv.Bug, 'OSV-2020-1337').get()._to_dict()) affected_commits = list(osv.AffectedCommit.query()) self.assertCountEqual([ 'ff8cc32ba60ad9cbb3b23f0a82aad96ebe9ff76b', 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', '4c155795426727ea05575bd5904321def23c03f4', 'b1c95a196f22d06fcf80df8c6691cd113d8fefff', 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', ], [commit.commit for commit in affected_commits])
def test_simplify_range(self): """Test simplifying commit range.""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': 'OSV-2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit=('a2ba949290915d445d34d0e8e9de2e7ce38198fc:' 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd'), repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() fix_result = osv.FixResult( id='oss-fuzz:123', commit=('b1c95a196f22d06fcf80df8c6691cd113d8fefff:' '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735'), repo_url='https://repo.com/repo', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) fix_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.expect_dict_equal( 'simplify_range', ndb.Key(osv.Bug, 'OSV-2020-1337').get()._to_dict())
def test_not_fixed(self): """Test not fixed bug.""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': '2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit='eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.assertDictEqual( { 'affected': [ 'branch-v0.1.1', 'branch-v0.1.1-with-fix', 'branch_1_cherrypick_regress', 'v0.1.1', 'v0.2' ], 'affected_fuzzy': ['0-1-1', '0-1-1', '1', '0-1-1', '0-2'], 'additional_commit_ranges': [{ 'introduced_in': 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', 'fixed_in': None }], 'fixed': '', 'regressed': 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', 'repo_url': 'https://repo.com/repo', 'confidence': 100, 'issue_id': '9001', 'last_modified': datetime.datetime(2021, 1, 1, 0, 0), 'timestamp': datetime.datetime(2020, 1, 1), 'source_id': 'oss-fuzz:123', 'project': 'project', 'ecosystem': 'ecosystem', 'summary': 'Heap-buffer-overflow in Foo', 'details': 'DETAILS', 'severity': 'MEDIUM', 'sort_key': '2020-0001337', 'source_of_truth': osv.SourceOfTruth.INTERNAL, 'reference_urls': ['https://url/'], 'public': False, 'status': osv.BugStatus.PROCESSED.value, 'has_affected': True, 'search_indices': ['project', '2020-1337', '2020', '1337'], }, ndb.Key(osv.Bug, '2020-1337').get()._to_dict()) affected_commits = list(osv.AffectedCommit.query()) for commit in affected_commits: self.assertEqual(100, commit.confidence) self.assertEqual('project', commit.project) self.assertCountEqual([ 'ff8cc32ba60ad9cbb3b23f0a82aad96ebe9ff76b', 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', '4c155795426727ea05575bd5904321def23c03f4', 'b1c95a196f22d06fcf80df8c6691cd113d8fefff', 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', '36f0bd9549298b44f9ff2496c9dd1326b3a9d0e2', '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', 'b9b3fd4732695b83c3068b7b6a14bb372ec31f98', 'b587c21c36a84e16cfc6b39eb68578d43b5281ad', '88e5ae3c40c85b702ba89a34c29f233048abb12b', '3ea6feea9bb853596c727abab309476cc07d1505', ], [commit.commit for commit in affected_commits])
def test_simplify_range(self): """Test simplifying commit range.""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': '2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit=('a2ba949290915d445d34d0e8e9de2e7ce38198fc:' 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd'), repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() fix_result = osv.FixResult( id='oss-fuzz:123', commit=('b1c95a196f22d06fcf80df8c6691cd113d8fefff:' '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735'), repo_url='https://repo.com/repo', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) fix_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.assertDictEqual( { 'affected': ['branch-v0.1.1', 'branch_1_cherrypick_regress', 'v0.1.1'], 'affected_fuzzy': ['0-1-1', '1', '0-1-1'], 'additional_commit_ranges': [{ 'introduced_in': 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', 'fixed_in': 'b9b3fd4732695b83c3068b7b6a14bb372ec31f98' }, { 'introduced_in': 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', 'fixed_in': None }], 'fixed': '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', 'regressed': 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', 'repo_url': 'https://repo.com/repo', 'confidence': 100, 'issue_id': '9001', 'last_modified': datetime.datetime(2021, 1, 1, 0, 0), 'timestamp': datetime.datetime(2020, 1, 1), 'source_id': 'oss-fuzz:123', 'project': 'project', 'ecosystem': 'ecosystem', 'summary': 'Heap-buffer-overflow in Foo', 'details': 'DETAILS', 'severity': 'MEDIUM', 'sort_key': '2020-0001337', 'source_of_truth': osv.SourceOfTruth.INTERNAL, 'reference_urls': ['https://url/'], 'public': False, 'status': osv.BugStatus.PROCESSED.value, 'has_affected': True, 'search_indices': ['project', '2020-1337', '2020', '1337'], }, ndb.Key(osv.Bug, '2020-1337').get()._to_dict())
def test_zero_regression_range(self): """Test regression range with "0:X".""" message = mock.Mock() message.attributes = { 'source_id': 'oss-fuzz:123', 'allocated_id': '2020-1337', } regress_result = osv.RegressResult( id='oss-fuzz:123', commit='unknown:eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', repo_url='https://repo.com/repo', issue_id='9001', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', severity='MEDIUM', reference_urls=['https://url/']) regress_result.put() fix_result = osv.FixResult( id='oss-fuzz:123', commit='8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', repo_url='https://repo.com/repo', project='project', ecosystem='ecosystem', summary='Heap-buffer-overflow in Foo', details='DETAILS', severity='MEDIUM', reference_urls=['https://url/']) fix_result.put() oss_fuzz.process_impact_task('oss-fuzz:123', message) self.assertDictEqual( { 'affected': ['branch-v0.1.1', 'branch_1_cherrypick_regress', 'v0.1.1'], 'affected_fuzzy': ['0-1-1', '1', '0-1-1'], 'additional_commit_ranges': [], 'fixed': '8d8242f545e9cec3e6d0d2e3f5bde8be1c659735', 'regressed': 'unknown:eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', 'repo_url': 'https://repo.com/repo', 'confidence': 80, 'issue_id': '9001', 'last_modified': datetime.datetime(2021, 1, 1, 0, 0), 'timestamp': datetime.datetime(2020, 1, 1), 'source_id': 'oss-fuzz:123', 'project': 'project', 'ecosystem': 'ecosystem', 'summary': 'Heap-buffer-overflow in Foo', 'details': 'DETAILS', 'severity': 'MEDIUM', 'sort_key': '2020-0001337', 'source_of_truth': osv.SourceOfTruth.INTERNAL, 'reference_urls': ['https://url/'], 'public': False, 'status': osv.BugStatus.PROCESSED.value, 'has_affected': True, 'search_indices': ['project', '2020-1337', '2020', '1337'], }, ndb.Key(osv.Bug, '2020-1337').get()._to_dict()) affected_commits = list(osv.AffectedCommit.query()) for commit in affected_commits: self.assertEqual(80, commit.confidence) self.assertEqual('project', commit.project) self.assertCountEqual([ 'ff8cc32ba60ad9cbb3b23f0a82aad96ebe9ff76b', 'febfac1940086bc1f6d3dc33fda0a1d1ba336209', '4c155795426727ea05575bd5904321def23c03f4', 'b1c95a196f22d06fcf80df8c6691cd113d8fefff', 'eefe8ec3f1f90d0e684890e810f3f21e8500a4cd', ], [commit.commit for commit in affected_commits])