Re: [PHP-CVS] cvs: php-src(PHP_5_3) / NEWS /ext/pcre php_pcre.c /ext/pcre/tests bug44925.phpt
Doesn't this bug exist in PHP_5_2 branch? That's not (AFAIK) dead branch yet so bug fixes MUST go there too. In which case you move that NEWS entry to the PHP_5_2 NEWS.. --Jani Nuno Lopes [EMAIL PROTECTED] kirjoitti: nlopess Thu Aug 14 13:12:42 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/pcre/tests bug44925.phpt Modified files: /php-src NEWS /php-src/ext/pcre php_pcre.c Log: Fixed bug #44925 (preg_grep() modifies input array) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.268r2=1.2027.2.547.2.965.2.269diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.268 php-src/NEWS:1.2027.2.547.2.965.2.269 --- php-src/NEWS:1.2027.2.547.2.965.2.268 Thu Aug 14 10:13:23 2008 +++ php-src/NEWSThu Aug 14 13:12:42 2008 @@ -30,6 +30,7 @@ - Fixed bug #45545 (DateInterval has 4 char limitation for ISO durations). (Derick) - Fixed bug #45044 (relative paths not resolved correctly). (Dmitry) +- Fixed bug #44925 (preg_grep() modifies input array). (Nuno) - Fixed bug #44100 (Inconsistent handling of static array declarations with duplicate keys). (Dmitry) - Fixed bug #43817 (opendir() fails on Windows directories with parent http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.168.2.9.2.21.2.19r2=1.168.2.9.2.21.2.20diff_format=u Index: php-src/ext/pcre/php_pcre.c diff -u php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.20 --- php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 Sat Aug 2 04:46:06 2008 +++ php-src/ext/pcre/php_pcre.c Thu Aug 14 13:12:42 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.19 2008/08/02 04:46:06 felipe Exp $ */ +/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.20 2008/08/14 13:12:42 nlopess Exp $ */ #include php.h #include php_ini.h @@ -1743,13 +1743,30 @@ /* 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) { + zend_bool is_copy; + zval *str; + + switch (Z_TYPE_PP(entry)) { + case IS_STRING: + is_copy = 0; + str = *entry; + break; + + default: + is_copy = 1; - convert_to_string_ex(entry); + ALLOC_ZVAL(str); + Z_ADDREF_PP(entry); /* the function below decreases the ref counting */ + COPY_PZVAL_TO_ZVAL(*str, *entry); + + convert_to_string(str); + break; + } /* 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_P(str), + Z_STRLEN_P(str), 0, 0, offsets, size_offsets); /* Check for too many substrings condition. */ @@ -1762,25 +1779,30 @@ } /* If the entry fits our requirements */ - if ((count 0 !invert) || - (count == PCRE_ERROR_NOMATCH invert)) { - Z_ADDREF_PP(entry); + if ((count 0 !invert) || (count == PCRE_ERROR_NOMATCH invert)) { + + if (!is_copy) { + SEPARATE_ARG_IF_REF(str); + } /* Add to return array */ switch (zend_hash_get_current_key(Z_ARRVAL_P(input), string_key, num_key, 0)) { case HASH_KEY_IS_STRING: zend_hash_update(Z_ARRVAL_P(return_value), string_key, - strlen(string_key)+1, entry, sizeof(zval *), NULL); + strlen(string_key)+1, str, sizeof(zval *), NULL); break; case HASH_KEY_IS_LONG: - zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, + zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, str, sizeof(zval *), NULL); break; } + } else if (is_copy) { + zval_dtor(str); +
Re: [PHP-CVS] cvs: php-src(PHP_5_3) / NEWS /ext/pcre php_pcre.c /ext/pcre/tests bug44925.phpt
I think this change is too intrusive for a bug fix only branch. This introduces a little BC break (to better match the manual description), so I think it should only go with 5.3. Nuno - Original Message - Doesn't this bug exist in PHP_5_2 branch? That's not (AFAIK) dead branch yet so bug fixes MUST go there too. In which case you move that NEWS entry to the PHP_5_2 NEWS.. --Jani Nuno Lopes [EMAIL PROTECTED] kirjoitti: nlopess Thu Aug 14 13:12:42 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/pcre/tests bug44925.phpt Modified files: /php-src NEWS /php-src/ext/pcre php_pcre.c Log: Fixed bug #44925 (preg_grep() modifies input array) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.268r2=1.2027.2.547.2.965.2.269diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.268 php-src/NEWS:1.2027.2.547.2.965.2.269 --- php-src/NEWS:1.2027.2.547.2.965.2.268 Thu Aug 14 10:13:23 2008 +++ php-src/NEWS Thu Aug 14 13:12:42 2008 @@ -30,6 +30,7 @@ - Fixed bug #45545 (DateInterval has 4 char limitation for ISO durations). (Derick) - Fixed bug #45044 (relative paths not resolved correctly). (Dmitry) +- Fixed bug #44925 (preg_grep() modifies input array). (Nuno) - Fixed bug #44100 (Inconsistent handling of static array declarations with duplicate keys). (Dmitry) - Fixed bug #43817 (opendir() fails on Windows directories with parent http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.168.2.9.2.21.2.19r2=1.168.2.9.2.21.2.20diff_format=u Index: php-src/ext/pcre/php_pcre.c diff -u php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.20 --- php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 Sat Aug 2 04:46:06 2008 +++ php-src/ext/pcre/php_pcre.c Thu Aug 14 13:12:42 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.19 2008/08/02 04:46:06 felipe Exp $ */ +/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.20 2008/08/14 13:12:42 nlopess Exp $ */ #include php.h #include php_ini.h @@ -1743,13 +1743,30 @@ /* 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) { + zend_bool is_copy; + zval *str; + + switch (Z_TYPE_PP(entry)) { + case IS_STRING: + is_copy = 0; + str = *entry; + break; + + default: + is_copy = 1; - convert_to_string_ex(entry); + ALLOC_ZVAL(str); + Z_ADDREF_PP(entry); /* the function below decreases the ref counting */ + COPY_PZVAL_TO_ZVAL(*str, *entry); + + convert_to_string(str); + break; + } /* 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_P(str), + Z_STRLEN_P(str), 0, 0, offsets, size_offsets); /* Check for too many substrings condition. */ @@ -1762,25 +1779,30 @@ } /* If the entry fits our requirements */ - if ((count 0 !invert) || - (count == PCRE_ERROR_NOMATCH invert)) { - Z_ADDREF_PP(entry); + if ((count 0 !invert) || (count == PCRE_ERROR_NOMATCH invert)) { + + if (!is_copy) { + SEPARATE_ARG_IF_REF(str); + } /* Add to return array */ switch (zend_hash_get_current_key(Z_ARRVAL_P(input), string_key, num_key, 0)) { case HASH_KEY_IS_STRING: zend_hash_update(Z_ARRVAL_P(return_value), string_key, - strlen(string_key)+1, entry, sizeof(zval *), NULL); + strlen(string_key)+1, str, sizeof(zval *), NULL); break; case HASH_KEY_IS_LONG: - zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, + zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, str, sizeof(zval *), NULL); break; } + } else if (is_copy) { + zval_dtor(str); + FREE_ZVAL(str); } - + 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=markuprev=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 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] cvs: php-src(PHP_5_3) / NEWS /ext/pcre php_pcre.c /ext/pcre/tests bug44925.phpt
Like I said in the bug report: THERE IS NO BC issue here. If any function changes input parameters it's a bug if the function is not supposed to do that! --Jani Nuno Lopes [EMAIL PROTECTED] kirjoitti: I think this change is too intrusive for a bug fix only branch. This introduces a little BC break (to better match the manual description), so I think it should only go with 5.3. Nuno - Original Message - Doesn't this bug exist in PHP_5_2 branch? That's not (AFAIK) dead branch yet so bug fixes MUST go there too. In which case you move that NEWS entry to the PHP_5_2 NEWS.. --Jani Nuno Lopes [EMAIL PROTECTED] kirjoitti: nlopess Thu Aug 14 13:12:42 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/pcre/tests bug44925.phpt Modified files: /php-src NEWS /php-src/ext/pcre php_pcre.c Log: Fixed bug #44925 (preg_grep() modifies input array) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.268r2=1.2027.2.547.2.965.2.269diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.268 php-src/NEWS:1.2027.2.547.2.965.2.269 --- php-src/NEWS:1.2027.2.547.2.965.2.268 Thu Aug 14 10:13:23 2008 +++ php-src/NEWS Thu Aug 14 13:12:42 2008 @@ -30,6 +30,7 @@ - Fixed bug #45545 (DateInterval has 4 char limitation for ISO durations). (Derick) - Fixed bug #45044 (relative paths not resolved correctly). (Dmitry) +- Fixed bug #44925 (preg_grep() modifies input array). (Nuno) - Fixed bug #44100 (Inconsistent handling of static array declarations with duplicate keys). (Dmitry) - Fixed bug #43817 (opendir() fails on Windows directories with parent http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.168.2.9.2.21.2.19r2=1.168.2.9.2.21.2.20diff_format=u Index: php-src/ext/pcre/php_pcre.c diff -u php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.20 --- php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.19 Sat Aug 2 04:46:06 2008 +++ php-src/ext/pcre/php_pcre.c Thu Aug 14 13:12:42 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.19 2008/08/02 04:46:06 felipe Exp $ */ +/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.20 2008/08/14 13:12:42 nlopess Exp $ */ #include php.h #include php_ini.h @@ -1743,13 +1743,30 @@ /* 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) { + zend_bool is_copy; + zval *str; + + switch (Z_TYPE_PP(entry)) { + case IS_STRING: + is_copy = 0; + str = *entry; + break; + + default: + is_copy = 1; - convert_to_string_ex(entry); + ALLOC_ZVAL(str); + Z_ADDREF_PP(entry); /* the function below decreases the ref counting */ + COPY_PZVAL_TO_ZVAL(*str, *entry); + + convert_to_string(str); + break; + } /* 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_P(str), + Z_STRLEN_P(str), 0, 0, offsets, size_offsets); /* Check for too many substrings condition. */ @@ -1762,25 +1779,30 @@ } /* If the entry fits our requirements */ - if ((count 0 !invert) || - (count == PCRE_ERROR_NOMATCH invert)) { - Z_ADDREF_PP(entry); + if ((count 0 !invert) || (count == PCRE_ERROR_NOMATCH invert)) { + + if (!is_copy) { + SEPARATE_ARG_IF_REF(str); + } /* Add to return array */ switch (zend_hash_get_current_key(Z_ARRVAL_P(input), string_key, num_key, 0)) { case HASH_KEY_IS_STRING: zend_hash_update(Z_ARRVAL_P(return_value), string_key, - strlen(string_key)+1, entry, sizeof(zval *), NULL); + strlen(string_key)+1, str, sizeof(zval *), NULL); break; case HASH_KEY_IS_LONG: - zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, + zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, str, sizeof(zval *), NULL); break; } + } else if (is_copy) { + zval_dtor(str); + FREE_ZVAL(str); } - + 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=markuprev=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 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php