LINUX.ORG.RU

регулярное выражение в php и Segmentation fault


0

0
Вот такой регексп

preg_replace_callback('#\[(quote.*?)]((?>\[(?!/?quote[^[]*?])|[^[]|(?R))*)\[/qu ote]#is', '_quote_filter_process_callback', $text);

если ему передать чуть больше 13кб кода между [quote] [/quote] у меня обрушивает php.

это только у меня руки кривые? или и у кого то еще?

Файл позволяющий воспроизвести проблему тут http://www.linux.org.ru/wiki/en/Image:test.php.zip

сегфолтиццо. причем и 4 и 5 пхп.
Komintern ★★★★★
()
хохо, это может быть security issue. в багзиллу бы пхпешникам...
k0l0b0k ★★
()
Ну и какой вывод?

PHP не нужен — есть JSP.
iZEN ★★★★★
()
у меня вообще ничего не происходит, ни сегфолта ни вывода от скрипта.

denis@laptop:~/Temp/Cache$ php -v
PHP 5.2.10-2ubuntu3 with Suhosin-Patch 0.9.7 (cli) (built: Sep 8 2009 13:35:29)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
denis@laptop:~/Temp/Cache$ php -l test.php
No syntax errors detected in test.php
denis@laptop:~/Temp/Cache$ php -f test.php
denis@laptop:~/Temp/Cache$
isden ★★★★★
()
php -v
PHP 5.2.10-pl0-gentoo (cli) (built: Jul 23 2009 15:34:11)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

Падает.
iSage ★★★★
()
НКА-регэксп может повалить процесс сожрав всю память, это факт. А ДКА рэгэкспы (POSIX) слишком негибкие.
Absurd ★★★
()
Нуу, эээ, смириться, наверно. Такие баги годами живут в ихнем трекере. Ты можешь проголосовать за баг, но это реально никак не помогает. Вон mailheader сколько лет включали.

Попробуй ещё проверить библиотеку pcre, может это в ней проблемы. И пхп может идти со своей либой в комплекте...

true_admin ★★★★★
()
Ответ на: комментарий от alex4
>> ДКА рэгэкспы (POSIX) слишком негибкие.

>NFA можно транслировать в DFA и наоборот

Речь идет о конкретной реализации: Некоторые на вид несложные перловые регэкспы (НКА) вылетают с SIGBUS или сжирают весь своп на специально сформированных строчках в несколько сот байт. В некоторых статьях по регэкспам такие примеры есть. Это не баг, а плохие входные данные для алгоритма.

Absurd ★★★
()
Ответ на: комментарий от alex4
>а зачем они там в NFA? DFA же o(N). в чем смысл?

Не углублялся, если честно. Насколько я помню, в похапе 1.4 были и НКА (preg_*) и ДКА (ereg_*). Но ДКА были тупыми из-за того что в них нельзя было отключить жадность и не работали обратные ссылки. Поэтому их почти никто и не использовал.

Absurd ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.