From: wesleygoku at yahoo dot com dot br Operating system: Windows 2000 SP4 PHP version: 4.3.8 PHP Bug Type: PCRE related Bug description: Glitch using preg_replace
Description: ------------ I'm trying to use preg_replace to evaluate my own XHTML tags, sending their arguments and contents to another funcion. There are two uses, the simple, without content (like <wstag x="y" />), and the complex, with content (like <wstag x="y">x</wstag>). Each one is parsed by their own function, and to evaluate ALL the complex tags (even the tags inside other tags) I'm using a while condition. The problem is very odd, it happens when I use more than one complex tag, and some simple tag before the complex ones, all of this inside another complex tag (you will understand better reading the code), with few complex lines or without simple tags before them, the results are good, but otherwise, the while condition just doesn't work and the Apache thread takes much more time proccessing the script (I don't know why, as the while code just repeats two times). Look at the URL below for more details and note the first code should work (try removing the second one), but not the second! Reproduce code: --------------- http://wstec.net/tmp/php_bug_pcre.html Expected result: ---------------- <pre>NEO_HTML( "list", "action="/?e=2&d=lay"", " <wsimg src="" /> <wsimg src="" /> NEO_HTML( "item", "id="Diretório anterior"", "NEO_HTML( "col", "width="284" href="" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "<b>Diretório anterior</b>" )NEO_HTML( "col", "href="" target="_blank"", "Diretório" )NEO_HTML( "col", "href="" target="_blank" align="right"", "" )" ) NEO_HTML( "item", "id="css.css"", "NEO_HTML( "col", "width="284" href="/css.css" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "css.css" )NEO_HTML( "col", "href="/css.css" target="_blank"", "Estilo CSS" )NEO_HTML( "col", "href="/css.css" target="_blank" align="right"", "3,23 KB" )" ) NEO_HTML( "item", "id="ico.gif"", "NEO_HTML( "col", "width="284" href="/ico.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "ico.gif" )NEO_HTML( "col", "href="/ico.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/ico.gif" target="_blank" align="right"", "66 Bytes" )" ) NEO_HTML( "item", "id="list_order_asc.gif"", "NEO_HTML( "col", "width="284" href="/list_order_asc.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "list_order_asc.gif" )NEO_HTML( "col", "href="/list_order_asc.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/list_order_asc.gif" target="_blank" align="right"", "61 Bytes" )" ) NEO_HTML( "item", "id="list_order_desc.gif"", "NEO_HTML( "col", "width="284" href="/list_order_desc.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "list_order_desc.gif" )NEO_HTML( "col", "href="/list_order_desc.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/list_order_desc.gif" target="_blank" align="right"", "61 Bytes" )" ) NEO_HTML( "item", "id="top_admin.gif"", "NEO_HTML( "col", "width="284" href="/top_admin.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_admin.gif" )NEO_HTML( "col", "href="/top_admin.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_admin.gif" target="_blank" align="right"", "1,17 KB" )" ) NEO_HTML( "item", "id="top_bg.gif"", "NEO_HTML( "col", "width="284" href="/top_bg.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_bg.gif" )NEO_HTML( "col", "href="/top_bg.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_bg.gif" target="_blank" align="right"", "149 Bytes" )" ) NEO_HTML( "item", "id="top_logo.gif"", "NEO_HTML( "col", "width="284" href="/top_logo.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_logo.gif" )NEO_HTML( "col", "href="/top_logo.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_logo.gif" target="_blank" align="right"", "2,08 KB" )" ) <wsfooter search="" action="move|Mover" action="copy|Copiar" action="remove|Remover|3" /> " )</pre> Actual result: -------------- <pre>NEO_HTML( "list", "action="/?e=2&d=lay"", " <wsimg src="" /> <wsimg src="" /> NEO_HTML( "item", "id="Diretório anterior"", "NEO_HTML( "col", "width="284" href="" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "<b>Diretório anterior</b>" )NEO_HTML( "col", "href="" target="_blank"", "Diretório" )NEO_HTML( "col", "href="" target="_blank" align="right"", "" )" ) NEO_HTML( "item", "id="css.css"", "NEO_HTML( "col", "width="284" href="/css.css" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "css.css" )NEO_HTML( "col", "href="/css.css" target="_blank"", "Estilo CSS" )NEO_HTML( "col", "href="/css.css" target="_blank" align="right"", "3,23 KB" )" ) NEO_HTML( "item", "id="ico.gif"", "NEO_HTML( "col", "width="284" href="/ico.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "ico.gif" )NEO_HTML( "col", "href="/ico.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/ico.gif" target="_blank" align="right"", "66 Bytes" )" ) NEO_HTML( "item", "id="list_order_asc.gif"", "NEO_HTML( "col", "width="284" href="/list_order_asc.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "list_order_asc.gif" )NEO_HTML( "col", "href="/list_order_asc.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/list_order_asc.gif" target="_blank" align="right"", "61 Bytes" )" ) NEO_HTML( "item", "id="list_order_desc.gif"", "NEO_HTML( "col", "width="284" href="/list_order_desc.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "list_order_desc.gif" )NEO_HTML( "col", "href="/list_order_desc.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/list_order_desc.gif" target="_blank" align="right"", "61 Bytes" )" ) NEO_HTML( "item", "id="top_admin.gif"", "NEO_HTML( "col", "width="284" href="/top_admin.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_admin.gif" )NEO_HTML( "col", "href="/top_admin.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_admin.gif" target="_blank" align="right"", "1,17 KB" )" ) NEO_HTML( "item", "id="top_bg.gif"", "NEO_HTML( "col", "width="284" href="/top_bg.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_bg.gif" )NEO_HTML( "col", "href="/top_bg.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_bg.gif" target="_blank" align="right"", "149 Bytes" )" ) NEO_HTML( "item", "id="top_logo.gif"", "NEO_HTML( "col", "width="284" href="/top_logo.gif" target="_blank"", " <img width="10" a="1" a="1" a="1" a="1" a="1" a="1" a="1" /> " )NEO_HTML( "col", "width="10"", "top_logo.gif" )NEO_HTML( "col", "href="/top_logo.gif" target="_blank"", "Imagem" )NEO_HTML( "col", "href="/top_logo.gif" target="_blank" align="right"", "2,08 KB" )" ) <wsfooter search="" action="move|Mover" action="copy|Copiar" action="remove|Remover|3" /> " )</pre> -- Edit bug report at http://bugs.php.net/?id=29802&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=29802&r=trysnapshot4 Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=29802&r=trysnapshot50 Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=29802&r=trysnapshot51 Fixed in CVS: http://bugs.php.net/fix.php?id=29802&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=29802&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=29802&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=29802&r=needscript Try newer version: http://bugs.php.net/fix.php?id=29802&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=29802&r=support Expected behavior: http://bugs.php.net/fix.php?id=29802&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=29802&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=29802&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=29802&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=29802&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=29802&r=dst IIS Stability: http://bugs.php.net/fix.php?id=29802&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=29802&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=29802&r=float