mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Generate function-jit corpus in generate_all.php
For use by oss-fuzz.
This commit is contained in:
parent
9d0c018668
commit
b3d37e9c91
3 changed files with 40 additions and 24 deletions
|
@ -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"]
|
||||
);
|
||||
|
|
25
sapi/fuzzer/generate_corpus_util.php
Normal file
25
sapi/fuzzer/generate_corpus_util.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
function generate_corpus_from_phpt(string $corpusDir, array $testDirs, int $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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
require __DIR__ . '/generate_corpus_util.php';
|
||||
|
||||
if ($argc >= 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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue