Re: [PHP4BETA] Bad 2nd arg to pcre_replace causes SIGSEGV when /e
| From: | Andrei Zmievski | Date: | Sat, 06 May 2000 19:03:12 +0000 |
| Subject: | Re: [PHP4BETA] Bad 2nd arg to pcre_replace causes SIGSEGV when /e | ||
| References: | 1 | Groups: | php.version4 |
| Request: | Send a blank email to php-version4+get-14597@lists.php.net to get a copy of this message | ||
Please update to the latest CVS. There is some new code which should
guard against dynamic code evaluation failure.
On Fri, 05 May 2000, Joey wrote:
> This is from CVS, ~8 am this morning (-0700).
> Short desc. is that preg_replace is causing a SIGSEGV when I miss a quote
> mark in the 2nd arg and use /e. Not sure if this is PHP or PCRE. If it's
> PCRE, not much we can do about it, otherwise I'll log a bug.
>
> Input:
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>
> Command being run:
> preg_replace("/(<)([^>]*)(>)/e", "'\\1FOO\\3", $line);
>
> Note the missing ' in the replace statement. This causes a SIGSEGV.
> Backtrace follows:
>
> <b>Parse error</b>: parse error in <b>Unknown</b> on line
> <b>0</b><br>
> Failed executing:
> '<FOO>
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x2ae3acb9 in memcpy () from /lib/libc.so.6
> (gdb) bt
> #0 0x2ae3acb9 in memcpy () from /lib/libc.so.6
> #1 0x80a27e2 in _estrndup (s=0x0, length=135156420,
> __zend_filename=0x8196796 "php_pcre.c", __zend_lineno=592,
> __zend_orig_filename=0x0, __zend_orig_lineno=0) at zend_alloc.c:285
> #2 0x80e5127 in _preg_do_eval (eval_str=0x825dfa4 "'\\1FOO\\3",
> subject=0x825e014 "<?xml version=\"1.0\" encoding=\"UTF-8\"
> standalone=\"no\"?>\n", offsets=0x825dc94, count=4,
> result=0x7ffff458) at php_pcre.c:592
> #3 0x80e537d in _php_pcre_replace (regex=0x825df2c "/(<)([^>]*)(>)/e",
> subject=0x825e014 "<?xml version=\"1.0\" encoding=\"UTF-8\"
> standalone=\"no\"?>\n", replace=0x825dfa4 "'\\1FOO\\3")
> at php_pcre.c:679
> #4 0x80e592e in _php_replace_in_subject (regex=0x825def4,
> replace=0x825df6c, subject=0x82486cc) at php_pcre.c:836
> #5 0x80e5d81 in php_if_preg_replace (ht=3, return_value=0x825debc,
> this_ptr=0x0, return_value_used=0) at php_pcre.c:901
> #6 0x8116af6 in execute (op_array=0x824b95c) at ./zend_execute.c:1573
> #7 0x809b522 in php_execute_script (primary_file=0x7ffff9c4) at
> main.c:1178
> #8 0x806da4d in main (argc=3, argv=0x7ffff9f4) at cgi_main.c:641
>
>
> --Joey Smith
>
> Please forgive the long sig:
>
> *** Notice To Bulk Emailers: Attention! Pursuant to US Code, Title 47,
> Chapter 5, Subchapter II, 227, any & all unsolicited commercial e-mail
> sent to this address is subject to a download and archival fee in the
> amount of the $1500 US and copies will be forwarded to domain
> administrators. Emailing denotes acceptance of said terms!
>
>
> --
> PHP 4.0 Beta Mailing List <http://www.php.net/version4/>
> To unsubscribe, e-mail: php4beta-unsubscribe@lists.php.net
> For additional commands, e-mail: php4beta-help@lists.php.net
> To contact the list administrators, e-mail: php4beta-admin@lists.php.net
>
-Andrei
* I don't have a solution but I admire the problem. *