com php-src: Fix bug #69891: NEWS Zend/tests/bug69891.phpt Zend/tests/bug69893.phpt Zend/zend_hash.c
| From: | Nikita Popov | Date: | Sat, 20 Jun 2015 15:23:58 +0000 |
| Subject: | com php-src: Fix bug #69891: NEWS Zend/tests/bug69891.phpt Zend/tests/bug69893.phpt Zend/zend_hash.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87410@lists.php.net to get a copy of this message | ||
Commit: e8217a2727b20997e6f39d59c44a20cc61d7e6c7
Author: Nikita Popov <nikic@php.net> Sat, 20 Jun 2015 17:23:58 +0200
Parents: 5bf7a3aac758dc57ce11e6000cbd00dabe0e0c68
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=e8217a2727b20997e6f39d59c44a20cc61d7e6c7
Log:
Fix bug #69891
Bugs:
https://bugs.php.net/69891
Changed paths:
M NEWS
A Zend/tests/bug69891.phpt
A Zend/tests/bug69893.phpt
M Zend/zend_hash.c
Diff:
diff --git a/NEWS b/NEWS
index 1ffee63..e560719 100644
--- a/NEWS
+++ b/NEWS
@@ -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 0000000..f4b3094
--- /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 0000000..7dc8d82
--- /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 cea57f6..d4c632f 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++) {