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)