com php-src: Improve the fix for bug #69756: NEWS Zend/zend_h ash.c Zend/zend_hash.h
| From: | Xinchen Hui | Date: | Fri, 05 Jun 2015 10:42:21 +0000 |
| Subject: | com php-src: Improve the fix for bug #69756: NEWS Zend/zend_h ash.c Zend/zend_hash.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87071@lists.php.net to get a copy of this message | ||
Commit: 0655abef1a88cfd3ffe430b93aadbd1023259914
Author: Xinchen Hui <laruence@php.net> Fri, 5 Jun 2015 18:42:21 +0800
Parents: ed5fbf5e49eab435cd7a0a9a5627698de92887c1
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0655abef1a88cfd3ffe430b93aadbd1023259914
Log:
Improve the fix for bug #69756
Bugs:
https://bugs.php.net/69756
Changed paths:
M NEWS
M Zend/zend_hash.c
M Zend/zend_hash.h
Diff:
diff --git a/NEWS b/NEWS
index ecd70bb..53cc621 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,8 @@
. Added support for SEARCH WebDav method. (Mats Lindh)
- Core:
+ . Fixed bug #69756 (Fatal error: Nesting level too deep - recursive dependency
+ ? with ===). (Dmitry, Laruence)
. Fixed bug #69758 (Item added to array not being removed by array_pop/shift
). (Laruence)
. Fixed bug #68475 (Add support for $callable() sytnax with 'Class::method').
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index b8d3b1f..5cd1b0b 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -71,7 +71,7 @@ static void _zend_is_inconsistent(const HashTable *ht, const char *file, int lin
#define HASH_PROTECT_RECURSION(ht) \
if ((ht)->u.flags & HASH_FLAG_APPLY_PROTECTION) { \
- if (((ht)->u.flags & 0xff00) >= (3 << 8)) { \
+ if (((ht)->u.flags & ZEND_HASH_APPLY_COUNT_MASK) >= (3 << 8)) { \
zend_error_noreturn(E_ERROR, "Nesting level too deep - recursive dependency?");\
} \
ZEND_HASH_INC_APPLY_COUNT(ht); \
diff --git a/Zend/zend_hash..h b/Zend/zend_hash.h
index 78a04ce..3ae3e45 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -845,8 +845,9 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
#define ZEND_HASH_APPLY_PROTECTION(ht) \
((ht)->u.flags & HASH_FLAG_APPLY_PROTECTION)
-#define ZEND_HASH_APPLY_SHIFT 8
-#define ZEND_HASH_GET_APPLY_COUNT(ht) ((ht)->u.flags >> ZEND_HASH_APPLY_SHIFT)
+#define ZEND_HASH_APPLY_SHIFT 8
+#define ZEND_HASH_APPLY_COUNT_MASK 0xff00
+#define ZEND_HASH_GET_APPLY_COUNT(ht) (((ht)->u.flags & ZEND_HASH_APPLY_COUNT_MASK) >>
ZEND_HASH_APPLY_SHIFT)
#define ZEND_HASH_INC_APPLY_COUNT(ht) ((ht)->u.flags += (1 << ZEND_HASH_APPLY_SHIFT))
#define ZEND_HASH_DEC_APPLY_COUNT(ht) ((ht)->u.flags -= (1 << ZEND_HASH_APPLY_SHIFT))