]> granicus.if.org Git - php/commitdiff
fix #34723 (array_count_values() strips leading zeroes)
authorAntony Dovgal <tony2001@php.net>
Tue, 4 Oct 2005 20:47:48 +0000 (20:47 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 4 Oct 2005 20:47:48 +0000 (20:47 +0000)
ext/standard/array.c

index db228071c414019925cb61eda45277770a791a84..a5ec285b85127000f99002f181049b13ea309552 100644 (file)
@@ -2726,9 +2726,10 @@ PHP_FUNCTION(array_count_values)
                } else if (Z_TYPE_PP(entry) == IS_STRING ||
                           Z_TYPE_PP(entry) == IS_BINARY ||
                           Z_TYPE_PP(entry) == IS_UNICODE) {
-                       /* make sure our array does not end up with numeric string keys */
-                       if ((Z_TYPE_PP(entry) == IS_STRING && is_numeric_string(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry), NULL, NULL, 0) == IS_LONG) ||
-                           (Z_TYPE_PP(entry) == IS_UNICODE && is_numeric_unicode(Z_USTRVAL_PP(entry), Z_USTRLEN_PP(entry), NULL, NULL, 0) == IS_LONG)) {
+                       /* 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;