在某些条件下,regexp上的PHP segfault,我应该如何报告


PHP segfault on regexp under certain conditions, how should I report this?

我有一个分段的脚本。我将案例简化为以下内容:

// a very loooong string ---->
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent mauris nibh, fringilla dapibus pharetra sit amet, cursus ut elit. Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et";
preg_match_all('/^(.)*$/', $string, $matches);

这在以下条件下发生故障:

在Windows和使用Apache时,它在PHP5.3.x和PHP5.4.x上崩溃。

它在Linux上运行良好。它通过命令行(在Windows上)和PHPUnit运行良好。

如果减少$string的长度,它将运行良好。如果将regexp更改为/^(?:.)*$/(非捕获),则运行良好。

所以我的猜测是我达到了某种极限。

pcre.backtrack_limit    1000000
pcre.recursion_limit    100000

我应该报告吗?如果是,如何/在哪里报告?


我可以很容易地通过更改regexp来解决问题,这样对我来说就不是什么大问题了

检查bugs.php.net以查看是否报告了类似的问题。如果没有,请制作自己的错误报告。看起来你对如何重现bug有很好的把握。