diff options
author | Nikita Popov <nikic@php.net> | 2015-06-20 17:23:58 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2015-06-20 17:23:58 +0200 |
commit | e8217a2727b20997e6f39d59c44a20cc61d7e6c7 (patch) | |
tree | 584b797d5f522100c96d5ddd9c40f705a895a45a | |
parent | 5bf7a3aac758dc57ce11e6000cbd00dabe0e0c68 (diff) | |
download | php-git-e8217a2727b20997e6f39d59c44a20cc61d7e6c7.tar.gz |
Fix bug #69891
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | Zend/tests/bug69891.phpt | 12 | ||||
-rw-r--r-- | Zend/tests/bug69893.phpt | 8 | ||||
-rw-r--r-- | Zend/zend_hash.c | 5 |
4 files changed, 23 insertions, 3 deletions
@@ -24,6 +24,7 @@ PHP NEWS (Christian Wenz) . Fixed bug #69889 (Null coalesce operator doesn't work for string offsets). (Nikita) + . Fixed bug #69891 (Unexpected array comparison result). (Nikita) . Fixed bug #69892 (Different arrays compare indentical due to integer key truncation). (Nikita) . Fixed bug #69893 (Strict comparison between integer and empty string keys diff --git a/Zend/tests/bug69891.phpt b/Zend/tests/bug69891.phpt new file mode 100644 index 0000000000..f4b30948de --- /dev/null +++ b/Zend/tests/bug69891.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #69891: Unexpected array comparison result +--FILE-- +<?php + +var_dump([1, 2, 3] <=> []); +var_dump([] <=> [1, 2, 3]); +var_dump([1] <=> [2, 3]); +--EXPECT-- +int(1) +int(-1) +int(-1) diff --git a/Zend/tests/bug69893.phpt b/Zend/tests/bug69893.phpt new file mode 100644 index 0000000000..7dc8d82eb3 --- /dev/null +++ b/Zend/tests/bug69893.phpt @@ -0,0 +1,8 @@ +--TEST-- +Bug #69893: Strict comparison between integer and empty string keys crashes +--FILE-- +<?php +var_dump([0 => 0] === ["" => 0]); +?> +--EXPECT-- +bool(false) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index cea57f6901..d4c632fdcc 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -2220,11 +2220,10 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co HASH_PROTECT_RECURSION(ht1); HASH_PROTECT_RECURSION(ht2); - result = ht1->nNumOfElements - ht2->nNumOfElements; - if (result!=0) { + if (ht1->nNumOfElements != ht2->nNumOfElements) { HASH_UNPROTECT_RECURSION(ht1); HASH_UNPROTECT_RECURSION(ht2); - return result; + return ht1->nNumOfElements > ht2->nNumOfElements ? 1 : -1; } for (idx1 = 0, idx2 = 0; idx1 < ht1->nNumUsed; idx1++) { |