@@ -464,6 +464,8 @@ def get_parser(): # pylint: disable=too-many-statements,too-many-locals
464
464
help = 'if specified, will use private corpora' ,
465
465
default = False ,
466
466
action = 'store_true' )
467
+ _add_engine_args (introspector_parser )
468
+ _add_environment_args (introspector_parser )
467
469
468
470
download_corpora_parser = subparsers .add_parser (
469
471
'download_corpora' , help = 'Download all corpora for a project.' )
@@ -1080,6 +1082,8 @@ def _get_fuzz_targets(project):
1080
1082
continue
1081
1083
if name == 'llvm-symbolizer' :
1082
1084
continue
1085
+ if name .endswith ('.so' ):
1086
+ continue
1083
1087
1084
1088
path = os .path .join (project .out , name )
1085
1089
# Python and JVM fuzz targets are only executable for the root user, so
@@ -1324,13 +1328,18 @@ def _introspector_prepare_corpus(args):
1324
1328
os .makedirs (fuzzer_corpus_dir )
1325
1329
run_fuzzer_command = [
1326
1330
'run_fuzzer' , '--sanitizer' , 'address' , '--corpus-dir' ,
1327
- fuzzer_corpus_dir , args .project .name , fuzzer_name
1331
+ fuzzer_corpus_dir , '--engine' , args .engine , args .project .name ,
1332
+ fuzzer_name
1328
1333
]
1329
1334
1330
1335
parsed_args = parse_args (parser , run_fuzzer_command )
1331
- parsed_args .fuzzer_args = [
1332
- f'-max_total_time={ args .seconds } ' , '-detect_leaks=0'
1333
- ]
1336
+ parsed_args .fuzzer_args = {
1337
+ 'afl' : [f'-V { args .seconds } ' ],
1338
+ 'centipede' : [f'--stop_after={ args .seconds } s' ],
1339
+ 'honggfuzz' : [f'--run_time={ args .seconds } ' ],
1340
+ 'libfuzzer' : [f'-max_total_time={ args .seconds } ' , '-detect_leaks=0' ],
1341
+ }[args .engine ]
1342
+
1334
1343
# Continue even if run command fails, because we do not have 100%
1335
1344
# accuracy in fuzz target detection, i.e. we might try to run something
1336
1345
# that is not a target.
@@ -1347,8 +1356,9 @@ def introspector(args):
1347
1356
args_to_append .append (_get_absolute_path (args .source_path ))
1348
1357
1349
1358
# Build fuzzers with ASAN.
1350
- build_fuzzers_command = [
1351
- 'build_fuzzers' , '--sanitizer=address' , args .project .name
1359
+ build_fuzzers_command = _env_to_docker_args (args .e or []) + [
1360
+ 'build_fuzzers' , '--sanitizer=address' , '--engine' , args .engine ,
1361
+ args .project .name
1352
1362
] + args_to_append
1353
1363
if not build_fuzzers (parse_args (parser , build_fuzzers_command )):
1354
1364
logger .error ('Failed to build project with ASAN' )
0 commit comments