From 8e11abd182ac6ddc10e2b6e4210dbbcf07b11aa7 Mon Sep 17 00:00:00 2001 From: David Korczynski <david@adalogics.com> Date: Tue, 2 Jul 2024 07:23:33 -0700 Subject: [PATCH 1/2] introspector: add optimal target API Create benchmarks using FI's optimal target analysis. Ref: https://github.com/google/oss-fuzz-gen/issues/356#issuecomment-2178716065 Signed-off-by: David Korczynski <david@adalogics.com> --- data_prep/introspector.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/data_prep/introspector.py b/data_prep/introspector.py index bcbd859100..db54406367 100755 --- a/data_prep/introspector.py +++ b/data_prep/introspector.py @@ -52,6 +52,7 @@ INTROSPECTOR_ORACLE_KEYWORD = '' INTROSPECTOR_ORACLE_EASY_PARAMS = '' INTROSPECTOR_ORACLE_ALL_CANDIDATES = '' +INTROSPECTOR_ORACLE_OPTIMAL = '' INTROSPECTOR_FUNCTION_SOURCE = '' INTROSPECTOR_PROJECT_SOURCE = '' INTROSPECTOR_XREF = '' @@ -72,6 +73,7 @@ def get_oracle_dict() -> Dict[str, Any]: 'low-cov-with-fuzz-keyword': query_introspector_for_keyword_targets, 'easy-params-far-reach': query_introspector_for_easy_param_targets, 'all-public-candidates': query_introspector_for_all_public_candidates, + 'optimal-targets': query_introspector_for_optimal_targets, } return oracle_dict @@ -84,7 +86,8 @@ def set_introspector_endpoints(endpoint): INTROSPECTOR_ORACLE_KEYWORD, INTROSPECTOR_ADDR_TYPE, \ INTROSPECTOR_ALL_HEADER_FILES, INTROSPECTOR_ALL_FUNC_TYPES, \ INTROSPECTOR_SAMPLE_XREFS, INTROSPECTOR_ORACLE_EASY_PARAMS, \ - INTROSPECTOR_ORACLE_ALL_CANDIDATES, INTROSPECTOR_ALL_JVM_SOURCE_PATH + INTROSPECTOR_ORACLE_ALL_CANDIDATES, INTROSPECTOR_ALL_JVM_SOURCE_PATH, \ + INTROSPECTOR_ORACLE_OPTIMAL INTROSPECTOR_ENDPOINT = endpoint logging.info('Fuzz Introspector endpoint set to %s', INTROSPECTOR_ENDPOINT) @@ -98,6 +101,7 @@ def set_introspector_endpoints(endpoint): f'{INTROSPECTOR_ENDPOINT}/easy-params-far-reach') INTROSPECTOR_ORACLE_ALL_CANDIDATES = ( f'{INTROSPECTOR_ENDPOINT}/all-public-candidates') + INTROSPECTOR_ORACLE_OPTIMAL = f'{INTROSPECTOR_ENDPOINT}/optimal-targets' INTROSPECTOR_FUNCTION_SOURCE = f'{INTROSPECTOR_ENDPOINT}/function-source-code' INTROSPECTOR_PROJECT_SOURCE = f'{INTROSPECTOR_ENDPOINT}/project-source-code' INTROSPECTOR_XREF = f'{INTROSPECTOR_ENDPOINT}/all-cross-references' @@ -195,6 +199,10 @@ def query_introspector_oracle(project: str, oracle_api: str) -> list[dict]: return _get_data(resp, 'functions', []) +def query_introspector_for_optimal_targets(project: str) -> list[dict]: + """Queries Fuzz Introspector for optimal target analysis.""" + return query_introspector_oracle(project, INTROSPECTOR_ORACLE_OPTIMAL) + def query_introspector_for_keyword_targets(project: str) -> list[dict]: """Queries FuzzIntrospector for targets with interesting fuzz keywords.""" return query_introspector_oracle(project, INTROSPECTOR_ORACLE_KEYWORD) From 6f3ddfa2174fcfede778b31be5b8c0e0384a51d9 Mon Sep 17 00:00:00 2001 From: David Korczynski <david@adalogics.com> Date: Tue, 2 Jul 2024 07:25:41 -0700 Subject: [PATCH 2/2] nit Signed-off-by: David Korczynski <david@adalogics.com> --- data_prep/introspector.py | 1 + 1 file changed, 1 insertion(+) diff --git a/data_prep/introspector.py b/data_prep/introspector.py index db54406367..6a03ae7279 100755 --- a/data_prep/introspector.py +++ b/data_prep/introspector.py @@ -203,6 +203,7 @@ def query_introspector_for_optimal_targets(project: str) -> list[dict]: """Queries Fuzz Introspector for optimal target analysis.""" return query_introspector_oracle(project, INTROSPECTOR_ORACLE_OPTIMAL) + def query_introspector_for_keyword_targets(project: str) -> list[dict]: """Queries FuzzIntrospector for targets with interesting fuzz keywords.""" return query_introspector_oracle(project, INTROSPECTOR_ORACLE_KEYWORD)