cvs: php-src /ext/standard array.c /ext/standard/tests/array bug38464.phpt
| From: | Ilia Alshanetsky | Date: | Wed, 06 Sep 2006 17:31:47 +0000 |
| Subject: | cvs: php-src /ext/standard array.c /ext/standard/tests/array bug38464.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-40354@lists.php.net to get a copy of this message | ||
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)++;
}