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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.