Bug #45735 [Com]: preg_match fails with Segmentation Fault on capturing subpattern

From: Date: Fri, 12 Apr 2013 18:40:49 +0000
Subject: Bug #45735 [Com]: preg_match fails with Segmentation Fault on capturing subpattern
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-178447@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=45735&edit=1

 ID:                 45735
 Comment by:         josh dot adell at gmail dot com
 Reported by:        johnston dot joshua at gmail dot com
 Summary:            preg_match fails with Segmentation Fault on
                     capturing subpattern
 Status:             Not a bug
 Type:               Bug
 Package:            PCRE related
 Operating System:   *
 PHP Version:        5.2CVS, 5.3CVS, 6CVS (2008-08-06)
 Block user comment: N
 Private report:     N

 New Comment:

Just hit this bug today as well. It would be nice if PHP handled this more 
gracefully by triggering an error or warning instead of segfaulting.


Previous Comments:
------------------------------------------------------------------------
[2013-04-11 16:35:34] michael at writhem dot com

why is this status not a bug?

------------------------------------------------------------------------
[2011-12-23 13:09:46] vojtech dot kurka at gmail dot com

We have hit this bug today on 5.3.8, just sending 70KB variable as an input to preg_match_all().

Please fix this, it took us quite a lot of time to find the root cause. This should never cause a
segfault. If the preg_match_all() function would throw a standard PHP error/warning, we would find
the problem immeadiately. Debugging such problems is just a waste of time, this bugreport is more
than 3 years old.

------------------------------------------------------------------------
[2011-12-15 14:42:35] josiecki at silvercube dot pl

Why is this bug status set to "Bogus"? Seems to be unsolved since over three years, and I
haven't found a single PHP installation that would not be vulnerable to this, including quite
new 5.3.8 installation...

------------------------------------------------------------------------
[2008-08-07 13:44:55] johnston dot joshua at gmail dot com

Just for my own personal knowledge, is it the capturing pattern the part that causes the recursion?

If I remove the () part of the pattern I can keep adding 0's to the below code I can trigger a
php memory error but no seg fault.

jjohnston:~$ php -r 'preg_match("/http:\/\/.+\.ru/i", str_repeat("http://google.ru", 2000000));

------------------------------------------------------------------------
[2008-08-07 11:27:29] lbarnaud@php.net

I seen that PCRE has a NO_RECURSE flag to avoid the recursion in
match() (described in pcre_exec.c).

Defining NO_RECURSE at compile time avoids this problem :)

diff -u -r1.38.2.3.2.10.2.3 config0.m4
--- ext/pcre/config0.m4 2 Jun 2008 14:12:20 -0000      
1.38.2.3.2.10.2.3
+++ ext/pcre/config0.m4 7 Aug 2008 11:25:39 -0000
@@ -59,7 +59,7 @@
                                 pcrelib/pcre_ord2utf8.c
pcrelib/pcre_refcount.c pcrelib/pcre_study.c \
                                 pcrelib/pcre_tables.c
pcrelib/pcre_try_flipped.c pcrelib/pcre_valid_utf8.c \
                                 pcrelib/pcre_version.c
pcrelib/pcre_xclass.c"
-    PHP_NEW_EXTENSION(pcre, $pcrelib_sources php_pcre.c, no,,-
+    PHP_NEW_EXTENSION(pcre, $pcrelib_sources php_pcre.c, no,,-
     PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
     PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h pcrelib/])
     AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])


------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=45735


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=45735&edit=1


Thread (18 messages)

« previous php.bugs (#178447) next »