summaryrefslogtreecommitdiff
path: root/sapi/fuzzer/generate_execute_corpus.php
blob: dd6424127aed69181f178730ad79e4fdbd926082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

if ($argc >= 2) {
    $testsDir = $argv[1];
} else {
    $testsDir = __DIR__ . '/../../Zend/tests';
}
if ($argc >= 3) {
    $corpusDir = $argv[2];
} else {
    $corpusDir = __DIR__ . '/corpus/execute';
}
if ($argc >= 4) {
    $maxLen = (int) $argv[3];
} else {
    $maxLen = 8 * 1024;
}

$it = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($testsDir),
    RecursiveIteratorIterator::LEAVES_ONLY
);

@mkdir($corpusDir);

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($testsDir, '', $file);
    $outFile = str_replace('/', '_', $outFile);
    if (!preg_match('/SKIP_SLOW_TESTS|SKIP_PERF_SENSITIVE|USE_ZEND_ALLOC/', $fullCode)) {
        file_put_contents($corpusDir . '/' . $outFile, $code);
    }
}