iliaa Wed Sep 6 17:31:47 2006 UTC Modified files: /php-src/ext/standard/tests/array bug38464.phpt /php-src/ext/standard array.c Log: MFB: Fixed bug #38464 (array_count_values() mishandles numeric strings). http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/bug38464.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/array/bug38464.phpt diff -u /dev/null php-src/ext/standard/tests/array/bug38464.phpt:1.2 --- /dev/null Wed Sep 6 17:31:47 2006 +++ php-src/ext/standard/tests/array/bug38464.phpt Wed Sep 6 17:31:46 2006 @@ -0,0 +1,20 @@ +--TEST-- +Bug #38464 (array_count_values() mishandles numeric strings) +--FILE-- +<?php +$array = array('-000', ' 001', 1, ' 123', '+123'); +var_dump(array_count_values($array)); +?> +--EXPECT-- +array(5) { + ["-000"]=> + int(1) + [" 001"]=> + int(1) + [1]=> + int(1) + [" 123"]=> + int(1) + ["+123"]=> + int(1) +} http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.382&r2=1.383&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.382 php-src/ext/standard/array.c:1.383 --- php-src/ext/standard/array.c:1.382 Tue Aug 8 18:06:43 2006 +++ php-src/ext/standard/array.c Wed Sep 6 17:31:47 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.382 2006/08/08 18:06:43 tony2001 Exp $ */ +/* $Id: array.c,v 1.383 2006/09/06 17:31:47 iliaa Exp $ */ #include "php.h" #include "php_ini.h" @@ -2571,48 +2571,18 @@ (void**)&tmp) == FAILURE) { zval *data; MAKE_STD_ZVAL(data); - Z_TYPE_P(data) = IS_LONG; - Z_LVAL_P(data) = 1; + ZVAL_LONG(data, 1); zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), &data, sizeof(data), NULL); } else { Z_LVAL_PP(tmp)++; } } else if (Z_TYPE_PP(entry) == IS_STRING || Z_TYPE_PP(entry) == IS_UNICODE) { - /* make sure our array does not end up with numeric string keys - * but don't touch those strings that start with 0 */ - if ((Z_TYPE_PP(entry) == IS_STRING && !(Z_STRLEN_PP(entry) > 1 && Z_STRVAL_PP(entry)[0] == '0') && is_numeric_string(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry), NULL, NULL, 0) == IS_LONG) || - (Z_TYPE_PP(entry) == IS_UNICODE && zend_cmp_unicode_and_literal(Z_USTRVAL_PP(entry), 1, "0", sizeof("0")-1) && is_numeric_unicode(Z_USTRVAL_PP(entry), Z_USTRLEN_PP(entry), NULL, NULL, 0) == IS_LONG)) { - zval tmp_entry; - - tmp_entry = **entry; - zval_copy_ctor(&tmp_entry); - - convert_to_long(&tmp_entry); - - if (zend_hash_index_find(Z_ARRVAL_P(return_value), - Z_LVAL(tmp_entry), - (void**)&tmp) == FAILURE) { - zval *data; - MAKE_STD_ZVAL(data); - Z_TYPE_P(data) = IS_LONG; - Z_LVAL_P(data) = 1; - zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL(tmp_entry), &data, sizeof(data), NULL); - } else { - Z_LVAL_PP(tmp)++; - } - - zval_dtor(&tmp_entry); - zend_hash_move_forward_ex(myht, &pos); - continue; - } - - if (zend_u_hash_find(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry)+1, (void**)&tmp) == FAILURE) { + if (zend_u_symtable_find(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, (void**)&tmp) == FAILURE) { zval *data; MAKE_STD_ZVAL(data); - Z_TYPE_P(data) = IS_LONG; - Z_LVAL_P(data) = 1; - zend_u_hash_update(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, &data, sizeof(data), NULL); + ZVAL_LONG(data, 1); + zend_u_symtable_update(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, &data, sizeof(data), NULL); } else { Z_LVAL_PP(tmp)++; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php