jani Wed Aug 20 01:21:48 2008 UTC Added files: (Branch: PHP_5_2) /php-src/ext/pcre/tests bug44925.phpt
Modified files: /php-src NEWS /php-src/ext/pcre php_pcre.c Log: MFH: - Fixed bug #44925 (preg_grep() modifies input array). (Nuno) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1202&r2=1.2027.2.547.2.1203&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.1202 php-src/NEWS:1.2027.2.547.2.1203 --- php-src/NEWS:1.2027.2.547.2.1202 Wed Aug 20 00:52:12 2008 +++ php-src/NEWS Wed Aug 20 01:21:46 2008 @@ -63,6 +63,7 @@ and hash()). (Tony) - Fixed bug #45004 (pg_insert() does not accept 4 digit timezone format). (Ilia) +- Fixed bug #44925 (preg_grep() modifies input array). (Nuno) - Fixed bug #44891 Memory leak using registerPHPFunctions and XSLT Variable as function parameter. (Rob) - Fixed bug #44830 (Very minor issue with backslash in heredoc). (Matt) http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.168.2.9.2.27&r2=1.168.2.9.2.28&diff_format=u Index: php-src/ext/pcre/php_pcre.c diff -u php-src/ext/pcre/php_pcre.c:1.168.2.9.2.27 php-src/ext/pcre/php_pcre.c:1.168.2.9.2.28 --- php-src/ext/pcre/php_pcre.c:1.168.2.9.2.27 Wed Aug 20 00:52:13 2008 +++ php-src/ext/pcre/php_pcre.c Wed Aug 20 01:21:47 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pcre.c,v 1.168.2.9.2.27 2008/08/20 00:52:13 jani Exp $ */ +/* $Id: php_pcre.c,v 1.168.2.9.2.28 2008/08/20 01:21:47 jani Exp $ */ #include "php.h" #include "php_ini.h" @@ -1731,13 +1731,17 @@ /* Go through the input array */ zend_hash_internal_pointer_reset(Z_ARRVAL_P(input)); - while(zend_hash_get_current_data(Z_ARRVAL_P(input), (void **)&entry) == SUCCESS) { + while (zend_hash_get_current_data(Z_ARRVAL_P(input), (void **)&entry) == SUCCESS) { + zval subject = **entry; - convert_to_string_ex(entry); + if (Z_TYPE_PP(entry) != IS_STRING) { + zval_copy_ctor(&subject); + convert_to_string(&subject); + } /* Perform the match */ - count = pcre_exec(pce->re, extra, Z_STRVAL_PP(entry), - Z_STRLEN_PP(entry), 0, + count = pcre_exec(pce->re, extra, Z_STRVAL(subject), + Z_STRLEN(subject), 0, 0, offsets, size_offsets); /* Check for too many substrings condition. */ @@ -1750,9 +1754,8 @@ } /* If the entry fits our requirements */ - if ((count > 0 && !invert) || - (count == PCRE_ERROR_NOMATCH && invert)) { - (*entry)->refcount++; + if ((count > 0 && !invert) || (count == PCRE_ERROR_NOMATCH && invert)) { + ZVAL_ADDREF(*entry); /* Add to return array */ switch (zend_hash_get_current_key(Z_ARRVAL_P(input), &string_key, &num_key, 0)) @@ -1768,7 +1771,11 @@ break; } } - + + if (Z_TYPE_PP(entry) != IS_STRING) { + zval_dtor(&subject); + } + zend_hash_move_forward(Z_ARRVAL_P(input)); } zend_hash_internal_pointer_reset(Z_ARRVAL_P(input)); http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/tests/bug44925.phpt?view=markup&rev=1.1 Index: php-src/ext/pcre/tests/bug44925.phpt +++ php-src/ext/pcre/tests/bug44925.phpt -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php