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_unserialize_dict.php';
|
||||||
require __DIR__ . '/generate_unserializehash_corpus.php';
|
require __DIR__ . '/generate_unserializehash_corpus.php';
|
||||||
require __DIR__ . '/generate_parser_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
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/generate_corpus_util.php';
|
||||||
|
|
||||||
if ($argc >= 2) {
|
if ($argc >= 2) {
|
||||||
$corpusDir = $argv[1];
|
$corpusDir = $argv[1];
|
||||||
} else {
|
} else {
|
||||||
|
@ -12,26 +14,4 @@ if ($argc >= 3) {
|
||||||
$testDirs = ["$baseDir/Zend/tests", "$baseDir/ext/reflection"];
|
$testDirs = ["$baseDir/Zend/tests", "$baseDir/ext/reflection"];
|
||||||
}
|
}
|
||||||
|
|
||||||
$maxLen = 8 * 1024;
|
generate_corpus_from_phpt($corpusDir, $testDirs);
|
||||||
@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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue