fix #34723 (array_count_values() strips leading zeroes)

This commit is contained in:
Antony Dovgal 2005-10-04 20:47:48 +00:00
parent 17bc1d09e8
commit f3e70f5b8c

View 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;