diff options
author | jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> | 2020-01-23 09:48:09 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-23 09:48:09 -0800 |
commit | 2bcc2bfe2b368c19f0620310bbf0b1c81af70bf6 (patch) | |
tree | b5b34f0834fc12a2d0b1bbd85439d1f96327fd36 | |
parent | d435df7f50d604314de2491bd976445c7302fe74 (diff) | |
download | oss-fuzz-2bcc2bfe2b368c19f0620310bbf0b1c81af70bf6.tar.gz |
[cifuzz][bisection] Make BuildData a namedtuple (#3282)
-rw-r--r-- | infra/bisector.py | 11 | ||||
-rw-r--r-- | infra/bisector_test.py | 57 | ||||
-rw-r--r-- | infra/build_specified_commit.py | 21 | ||||
-rw-r--r-- | infra/build_specified_commit_test.py | 10 | ||||
-rw-r--r-- | infra/cifuzz.py | 10 |
5 files changed, 46 insertions, 63 deletions
diff --git a/infra/bisector.py b/infra/bisector.py index 557b92beb..de9fad71b 100644 --- a/infra/bisector.py +++ b/infra/bisector.py @@ -71,11 +71,12 @@ def main(): help='The default is "address".') parser.add_argument('--architecture', default='x86_64') args = parser.parse_args() - build_data = build_specified_commit.BuildData() - build_data.project_name = args.project_name - build_data.engine = args.engine - build_data.sanitizer = args.sanitizer - build_data.architecture = args.architecture + + build_data = build_specified_commit.BuildData(project_name=args.project_name, + engine=args.engine, + sanitizer=args.sanitizer, + architecture=args.architecture) + error_sha = bisect(args.commit_old, args.commit_new, args.testcase, args.fuzz_target, build_data) if not error_sha: diff --git a/infra/bisector_test.py b/infra/bisector_test.py index a758d30fe..e51db62f9 100644 --- a/infra/bisector_test.py +++ b/infra/bisector_test.py @@ -31,11 +31,11 @@ class TestBisect(unittest.TestCase): def test_bisect_invalid_repo(self): """Test the bisection method on a project that does not exist.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'not-a-real-repo' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData( + project_name='not-a-real-repo', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') commit_old = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' commit_new = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' testcase = os.path.join(TEST_DIR_PATH, 'testcases', 'usrsctp_test_data') @@ -45,11 +45,10 @@ class TestBisect(unittest.TestCase): def test_bisect_curl(self): """Test the bisect method on the curl project.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'curl' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData(project_name='curl', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') commit_new = 'dda418266c99ceab368d723facb52069cbb9c8d5' commit_old = 'df26f5f9c36e19cd503c0e462e9f72ad37b84c82' fuzz_target = 'curl_fuzzer_ftp' @@ -60,11 +59,10 @@ class TestBisect(unittest.TestCase): def test_bisect_libarchive(self): """Test the bisect method on libarchive.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'libarchive' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData(project_name='libarchive', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') commit_new = '458e49358f17ec58d65ab1c45cf299baaf3c98d1' commit_old = '5bd2a9b6658a3a6efa20bb9ad75bd39a44d71da6' fuzz_target = 'libarchive_fuzzer' @@ -75,11 +73,10 @@ class TestBisect(unittest.TestCase): def test_bisect_usrsctp(self): """Test the bisect method on the usrsctp.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'usrsctp' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData(project_name='usrsctp', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') commit_old = '4886aaa49fb90e479226fcfc3241d74208908232' commit_new = 'c710749b1053978179a027973a3ea3bccf20ee5c' testcase = os.path.join(TEST_DIR_PATH, 'testcases', 'usrsctp_test_data') @@ -90,11 +87,11 @@ class TestBisect(unittest.TestCase): def test_bisect_usrsctp_single_error_exists(self): """Tests what happens with a single with an error.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'usrsctp' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData(project_name='usrsctp', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') + commit_old = 'c710749b1053978179a027973a3ea3bccf20ee5c' commit_new = 'c710749b1053978179a027973a3ea3bccf20ee5c' testcase = os.path.join(TEST_DIR_PATH, 'testcases', 'usrsctp_test_data') @@ -105,11 +102,11 @@ class TestBisect(unittest.TestCase): def test_bisect_usrsctp_single_no_error_exists(self): """Tests what happens with a single with an error.""" - build_data = build_specified_commit.BuildData() - build_data.project_name = 'usrsctp' - build_data.engine = 'libfuzzer' - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData(project_name='usrsctp', + engine='libfuzzer', + sanitizer='address', + architecture='x86_64') + commit_old = '4886aaa49fb90e479226fcfc3241d74208908232' commit_new = '4886aaa49fb90e479226fcfc3241d74208908232' testcase = os.path.join(TEST_DIR_PATH, 'testcases', 'usrsctp_test_data') diff --git a/infra/build_specified_commit.py b/infra/build_specified_commit.py index 2288cc135..3861f0a1a 100644 --- a/infra/build_specified_commit.py +++ b/infra/build_specified_commit.py @@ -18,29 +18,14 @@ from a specific point in time. This feature can be used for implementations like continuious integration fuzzing and bisection to find errors """ import os +import collections import re import subprocess import helper - -class BuildData: - """Data required for bisection of errors in OSS-Fuzz projects. - - Attributes: - project_name: The name of the OSS-Fuzz project that is being checked. - engine: The fuzzing engine to be used. - sanitizer: The sanitizer to be used. - architecture: CPU architecture to build the fuzzer for. - """ - - # pylint: disable=too-few-public-methods - - def __init__(self): - self.project_name = '' - self.engine = 'libfuzzer' - self.sanitizer = 'address' - self.architecture = 'x86_64' +BuildData = collections.namedtuple( + 'BuildData', ['project_name', 'engine', 'sanitizer', 'architecture']) def build_fuzzers_from_commit(commit, build_repo_manager, build_data): diff --git a/infra/build_specified_commit_test.py b/infra/build_specified_commit_test.py index ef0eb1f3f..98e749955 100644 --- a/infra/build_specified_commit_test.py +++ b/infra/build_specified_commit_test.py @@ -47,11 +47,11 @@ class BuildImageIntegrationTests(unittest.TestCase): yara_repo_manager = repo_manager.RepoManager( 'https://github.com/VirusTotal/yara.git', tmp_dir, repo_name='yara') - build_data = build_specified_commit.BuildData() - build_data.sanitizer = 'address' - build_data.architecture = 'x86_64' - build_data.engine = 'libfuzzer' - build_data.project_name = 'yara' + build_data = build_specified_commit.BuildData(sanitizer='address', + architecture='x86_64', + engine='libfuzzer', + project_name='yara') + build_specified_commit.build_fuzzers_from_commit(old_commit, yara_repo_manager, build_data) diff --git a/infra/cifuzz.py b/infra/cifuzz.py index 161e9d953..9dcb2b192 100644 --- a/infra/cifuzz.py +++ b/infra/cifuzz.py @@ -75,11 +75,11 @@ def build_fuzzers(args): build_repo_manager = repo_manager.RepoManager(inferred_url, tmp_dir, repo_name=repo_name) - build_data = build_specified_commit.BuildData() - build_data.project_name = args.project_name - build_data.sanitizer = 'address' - build_data.engine = 'libfuzzer' - build_data.architecture = 'x86_64' + build_data = build_specified_commit.BuildData( + project_name=args.project_name, + sanitizer='address', + engine='libfuzzer', + architecture='x86_64') return build_specified_commit.build_fuzzers_from_commit( args.commit_sha, build_repo_manager, build_data) == 0 |