nlopess Thu Aug 14 14:37:39 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/pcre php_pcre.c /php-src/ext/pcre/tests bug44925.phpt Log: after rereading the documentation about preg_grep(), lets match the behavior in HEAD (return the original array elements instead of the new string). tune the test accordingly http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/php_pcre.c?r1=1.168.2.9.2.21.2.20&r2=1.168.2.9.2.21.2.21&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.21.2.20 php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.21 --- php-src/ext/pcre/php_pcre.c:1.168.2.9.2.21.2.20 Thu Aug 14 13:12:42 2008 +++ php-src/ext/pcre/php_pcre.c Thu Aug 14 14:37:39 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.20 2008/08/14 13:12:42 nlopess Exp $ */ +/* $Id: php_pcre.c,v 1.168.2.9.2.21.2.21 2008/08/14 14:37:39 nlopess Exp $ */ #include "php.h" #include "php_ini.h" @@ -1744,29 +1744,16 @@ /* 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) { - zend_bool is_copy; - zval *str; + zval subject = **entry; - switch (Z_TYPE_PP(entry)) { - case IS_STRING: - is_copy = 0; - str = *entry; - break; - - default: - is_copy = 1; - - 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; + 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_P(str), - Z_STRLEN_P(str), 0, + count = pcre_exec(pce->re, extra, Z_STRVAL(subject), + Z_STRLEN(subject), 0, 0, offsets, size_offsets); /* Check for too many substrings condition. */ @@ -1781,26 +1768,25 @@ /* If the entry fits our requirements */ if ((count > 0 && !invert) || (count == PCRE_ERROR_NOMATCH && invert)) { - if (!is_copy) { - SEPARATE_ARG_IF_REF(str); - } + Z_ADDREF_PP(entry); /* 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, &str, sizeof(zval *), NULL); + strlen(string_key)+1, entry, sizeof(zval *), NULL); break; case HASH_KEY_IS_LONG: - zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, &str, + zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry, sizeof(zval *), NULL); break; } - } else if (is_copy) { - zval_dtor(str); - FREE_ZVAL(str); + } + + if (Z_TYPE_PP(entry) != IS_STRING) { + zval_dtor(&subject); } zend_hash_move_forward(Z_ARRVAL_P(input)); http://cvs.php.net/viewvc.cgi/php-src/ext/pcre/tests/bug44925.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u Index: php-src/ext/pcre/tests/bug44925.phpt diff -u php-src/ext/pcre/tests/bug44925.phpt:1.1.2.1 php-src/ext/pcre/tests/bug44925.phpt:1.1.2.2 --- php-src/ext/pcre/tests/bug44925.phpt:1.1.2.1 Thu Aug 14 13:12:42 2008 +++ php-src/ext/pcre/tests/bug44925.phpt Thu Aug 14 14:37:39 2008 @@ -54,33 +54,35 @@ [0]=> string(1) "1" [1]=> - string(1) "2" + int(2) [2]=> - string(1) "3" + int(3) [3]=> - string(3) "1.1" + float(1.1) [6]=> - string(5) "Array" + array(0) { + } [7]=> string(1) "a" [8]=> - string(1) "b" + &string(1) "b" } array(7) { [0]=> string(1) "1" [1]=> - string(1) "2" + int(2) [2]=> - string(1) "3" + int(3) [3]=> - string(3) "1.1" + float(1.1) [6]=> - string(5) "Array" + array(0) { + } [7]=> string(1) "a" [8]=> - string(1) "b" + &string(1) "y" } array(9) { [0]=>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php