From: Nikita Popov Date: Sat, 20 Jun 2015 14:39:23 +0000 (+0200) Subject: Fixed bug #69892 X-Git-Tag: php-5.4.44~5^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7fc04937f5ba48e05d311937477ba81b0e07ffa8;p=php Fixed bug #69892 --- diff --git a/NEWS b/NEWS index ab5f07dd19..544346f6a2 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2015 PHP 5.4.44 +. Fixed bug #69892 (Different arrays compare indentical due to integer key + truncation). (Nikita) + 09 Jul 2015 PHP 5.4.43 - Core: diff --git a/Zend/tests/bug69892.phpt b/Zend/tests/bug69892.phpt new file mode 100644 index 0000000000..d14f85fa52 --- /dev/null +++ b/Zend/tests/bug69892.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #69892: Different arrays compare indentical due to integer key truncation +--SKIPIF-- + +--FILE-- + 0] === [0x100000000 => 0]); +?> +--EXPECT-- +bool(false) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index bfff87a67e..9b3fb746af 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1513,11 +1513,10 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co } if (ordered) { if (p1->nKeyLength==0 && p2->nKeyLength==0) { /* numeric indices */ - result = p1->h - p2->h; - if (result!=0) { + if (p1->h != p2->h) { HASH_UNPROTECT_RECURSION(ht1); HASH_UNPROTECT_RECURSION(ht2); - return result; + return p1->h > p2->h ? 1 : -1; } } else { /* string indices */ result = p1->nKeyLength - p2->nKeyLength;