diff --git a/sapi/fuzzer/generate_all.php b/sapi/fuzzer/generate_all.php index 589781b0040..9c6f97ca6ce 100644 --- a/sapi/fuzzer/generate_all.php +++ b/sapi/fuzzer/generate_all.php @@ -2,4 +2,15 @@ require __DIR__ . '/generate_unserialize_dict.php'; require __DIR__ . '/generate_unserializehash_corpus.php'; require __DIR__ . '/generate_parser_corpus.php'; -require __DIR__ . '/generate_execute_corpus.php'; + +require __DIR__ . '/generate_corpus_util.php'; + +$baseDir = __DIR__ . '/../..'; +generate_corpus_from_phpt( + __DIR__ . '/corpus/execute', + ["$baseDir/Zend/tests", "$baseDir/ext/reflection"] +); +generate_corpus_from_phpt( + __DIR__ . '/corpus/function-jit', + ["$baseDir/Zend/tests", "$baseDir/ext/opcache/tests/jit"] +); diff --git a/sapi/fuzzer/generate_corpus_util.php b/sapi/fuzzer/generate_corpus_util.php new file mode 100644 index 00000000000..29d152a1fae --- /dev/null +++ b/sapi/fuzzer/generate_corpus_util.php @@ -0,0 +1,25 @@ + $maxLen) continue; + + $outFile = str_replace($testDir, '', $file); + $outFile = str_replace('/', '_', $outFile); + if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) { + file_put_contents($corpusDir . '/' . $outFile, $code); + } + } + } +} diff --git a/sapi/fuzzer/generate_execute_corpus.php b/sapi/fuzzer/generate_execute_corpus.php index e7e72f5b2e5..8ed922df646 100644 --- a/sapi/fuzzer/generate_execute_corpus.php +++ b/sapi/fuzzer/generate_execute_corpus.php @@ -1,5 +1,7 @@ = 2) { $corpusDir = $argv[1]; } else { @@ -12,26 +14,4 @@ if ($argc >= 3) { $testDirs = ["$baseDir/Zend/tests", "$baseDir/ext/reflection"]; } -$maxLen = 8 * 1024; -@mkdir($corpusDir); - -foreach ($testDirs as $testDir) { - $it = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($testDir), - RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($it as $file) { - if (!preg_match('/\.phpt$/', $file)) continue; - $fullCode = file_get_contents($file); - if (!preg_match('/--FILE--\R(.*?)\R--([_A-Z]+)--/s', $fullCode, $matches)) continue; - $code = $matches[1]; - if (strlen($code) > $maxLen) continue; - - $outFile = str_replace($testDir, '', $file); - $outFile = str_replace('/', '_', $outFile); - if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) { - file_put_contents($corpusDir . '/' . $outFile, $code); - } - } -} +generate_corpus_from_phpt($corpusDir, $testDirs);