]> granicus.if.org Git - php/commitdiff
Improve the fix for bug #69756
authorXinchen Hui <laruence@php.net>
Fri, 5 Jun 2015 10:42:21 +0000 (18:42 +0800)
committerXinchen Hui <laruence@php.net>
Fri, 5 Jun 2015 10:42:21 +0000 (18:42 +0800)
NEWS
Zend/zend_hash.c
Zend/zend_hash.h

diff --git a/NEWS b/NEWS
index ecd70bba9d763ef8b5e84c2f137086ab13a39a3d..53cc6215a23dc122c7062ab0de7b1b17ef9fca83 100644 (file)
--- 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').
index b8d3b1f3897d126f1ca0ce07e1bd97b06edbbeef..5cd1b0bfebd2e46b6b9884e9232b7d8e71bb420e 100644 (file)
@@ -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);                                                                                                  \
index 78a04ce038d283f89fa2837d5b0726160c79d31f..3ae3e4571bb4d7043a8c9cbdb2974a0d36671bf1 100644 (file)
@@ -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))