ID:               16851
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Feedback
 Bug Type:         PCRE related
 Operating System: linux
 PHP Version:      4.2.0
 New Comment:

Can you also add a simple and short script which can
be used to reproduce this ?



Previous Comments:
------------------------------------------------------------------------

[2002-04-26 08:39:38] [EMAIL PROTECTED]

I was exeperinecing a lot of segfaults in apache error_log, but I was
not able to identify a simple script that could cause this error, since
it seemed to happen randomly in our programs (a script that works well
only sometimes causes the segfault).
>From the backtrace I found out the problem was inside pcre library:

#0  0x40215f38 in strcmp () from /lib/i686/libc.so.6
#1  0x404bf3ff in pcre_get_compiled_regex () from
/usr/lib/apache/libphp4.so
#2  0x404bfbe5 in php_pcre_match () from /usr/lib/apache/libphp4.so
#3  0x404bff8d in zif_preg_match_all () from
/usr/lib/apache/libphp4.so
#4  0x4046cd8d in execute () from /usr/lib/apache/libphp4.so
#5  0x4047db98 in zend_execute_scripts () from
/usr/lib/apache/libphp4.so
#6  0x4048ba56 in php_execute_script () from
/usr/lib/apache/libphp4.so
#7  0x4048763a in apache_php_module_main () from
/usr/lib/apache/libphp4.so
#8  0x404881c3 in send_php () from /usr/lib/apache/libphp4.so
#9  0x40488223 in send_parsed_php () from /usr/lib/apache/libphp4.so
#10 0x080549fd in ap_invoke_handler ()
#11 0x0806732c in process_request_internal ()
#12 0x080673a3 in ap_process_request ()
#13 0x0805f7c7 in child_main ()
#14 0x0805fa09 in make_child ()
#15 0x0805faad in startup_children ()
#16 0x080600fd in standalone_main ()
#17 0x080609f3 in main ()
#18 0x401ac627 in __libc_start_main (main=0x8060570 <main>, argc=1,
ubp_av=0xbffff714, 
    init=0x804f328 <_init>, fini=0x8074e90 <_fini>,
rtld_fini=0x4000dcc4 <_dl_fini>, stack_end=0xbffff70c)
    at ../sysdeps/generic/libc-start.c:129


Looking at the source code I found out a possible bug.
I include here a patch for the modifications I have made which seems to
have fixed the problem.

Regards,
Matteo Fago


--- pcre/php_pcre.c.orig        Fri Apr 26 14:03:31 2002
+++ pcre/php_pcre.c     Fri Apr 26 14:05:47 2002
@@ -64,6 +64,7 @@
        pefree(pce->re, 1);
 #if HAVE_SETLOCALE
        if ((void*)pce->tables) pefree((void*)pce->tables, 1);
+       if ((void*)pce->locale) pefree((void*)pce->locale, 1);
 #endif
 }
 
@@ -151,7 +152,7 @@
        regex_len = strlen(regex);
        if (zend_hash_find(&PCRE_G(pcre_cache), regex, regex_len+1,
(void **)&pce) == SUCCESS) {
 #if HAVE_SETLOCALE
-               if (!strcmp(pce->locale, locale)) {
+               if (locale!=NULL && pce->locale!=NULL &&
!strcmp(pce->locale, locale)) {
 #endif
                        *extra = pce->extra;
                        *preg_options = pce->preg_options;
@@ -298,7 +299,12 @@
        new_entry.extra = *extra;
        new_entry.preg_options = poptions;
 #if HAVE_SETLOCALE
-       new_entry.locale = locale;
+       if (locale!=NULL) {
+               new_entry.locale = php_pcre_malloc(strlen(locale)+1);
+               strcpy(new_entry.locale,locale);
+       } else {
+               new_entry.locale=locale;
+       }
        new_entry.tables = tables;
 #endif
        zend_hash_update(&PCRE_G(pcre_cache), regex, regex_len+1, (void
*)&new_entry,






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


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

Reply via email to