summaryrefslogtreecommitdiff
path: root/sapi/fuzzer/generate_execute_corpus.php
diff options
context:
space:
mode:
Diffstat (limited to 'sapi/fuzzer/generate_execute_corpus.php')
-rw-r--r--sapi/fuzzer/generate_execute_corpus.php38
1 files changed, 38 insertions, 0 deletions
diff --git a/sapi/fuzzer/generate_execute_corpus.php b/sapi/fuzzer/generate_execute_corpus.php
new file mode 100644
index 0000000000..dd6424127a
--- /dev/null
+++ b/sapi/fuzzer/generate_execute_corpus.php
@@ -0,0 +1,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);
+ }
+}