Skip to content

Commit b3d37e9

Browse files
committed
Generate function-jit corpus in generate_all.php
For use by oss-fuzz.
1 parent 9d0c018 commit b3d37e9

File tree

3 files changed

+40
-24
lines changed

3 files changed

+40
-24
lines changed

sapi/fuzzer/generate_all.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,15 @@
22
require __DIR__ . '/generate_unserialize_dict.php';
33
require __DIR__ . '/generate_unserializehash_corpus.php';
44
require __DIR__ . '/generate_parser_corpus.php';
5-
require __DIR__ . '/generate_execute_corpus.php';
5+
6+
require __DIR__ . '/generate_corpus_util.php';
7+
8+
$baseDir = __DIR__ . '/../..';
9+
generate_corpus_from_phpt(
10+
__DIR__ . '/corpus/execute',
11+
["$baseDir/Zend/tests", "$baseDir/ext/reflection"]
12+
);
13+
generate_corpus_from_phpt(
14+
__DIR__ . '/corpus/function-jit',
15+
["$baseDir/Zend/tests", "$baseDir/ext/opcache/tests/jit"]
16+
);

sapi/fuzzer/generate_corpus_util.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
function generate_corpus_from_phpt(string $corpusDir, array $testDirs, int $maxLen = 8 * 1024) {
4+
@mkdir($corpusDir);
5+
foreach ($testDirs as $testDir) {
6+
$it = new RecursiveIteratorIterator(
7+
new RecursiveDirectoryIterator($testDir),
8+
RecursiveIteratorIterator::LEAVES_ONLY
9+
);
10+
11+
foreach ($it as $file) {
12+
if (!preg_match('/\.phpt$/', $file)) continue;
13+
$fullCode = file_get_contents($file);
14+
if (!preg_match('/--FILE--\R(.*?)\R--([_A-Z]+)--/s', $fullCode, $matches)) continue;
15+
$code = $matches[1];
16+
if (strlen($code) > $maxLen) continue;
17+
18+
$outFile = str_replace($testDir, '', $file);
19+
$outFile = str_replace('/', '_', $outFile);
20+
if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) {
21+
file_put_contents($corpusDir . '/' . $outFile, $code);
22+
}
23+
}
24+
}
25+
}
Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
require __DIR__ . '/generate_corpus_util.php';
4+
35
if ($argc >= 2) {
46
$corpusDir = $argv[1];
57
} else {
@@ -12,26 +14,4 @@
1214
$testDirs = ["$baseDir/Zend/tests", "$baseDir/ext/reflection"];
1315
}
1416

15-
$maxLen = 8 * 1024;
16-
@mkdir($corpusDir);
17-
18-
foreach ($testDirs as $testDir) {
19-
$it = new RecursiveIteratorIterator(
20-
new RecursiveDirectoryIterator($testDir),
21-
RecursiveIteratorIterator::LEAVES_ONLY
22-
);
23-
24-
foreach ($it as $file) {
25-
if (!preg_match('/\.phpt$/', $file)) continue;
26-
$fullCode = file_get_contents($file);
27-
if (!preg_match('/--FILE--\R(.*?)\R--([_A-Z]+)--/s', $fullCode, $matches)) continue;
28-
$code = $matches[1];
29-
if (strlen($code) > $maxLen) continue;
30-
31-
$outFile = str_replace($testDir, '', $file);
32-
$outFile = str_replace('/', '_', $outFile);
33-
if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) {
34-
file_put_contents($corpusDir . '/' . $outFile, $code);
35-
}
36-
}
37-
}
17+
generate_corpus_from_phpt($corpusDir, $testDirs);

0 commit comments

Comments
 (0)