diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2018-11-15 17:13:12 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2018-11-15 17:16:39 +0100 |
commit | dee5a450d9b7f7b03f012dd1912cc0a3dcb0482c (patch) | |
tree | 2a0727b81684fe683fc9efe3b9a5b3df01840a72 /Zend/zend_types.h | |
parent | 2a062f3c020e8cc53e49fa823021f3e8ce591cfe (diff) | |
download | php-git-dee5a450d9b7f7b03f012dd1912cc0a3dcb0482c.tar.gz |
Fixed bug #77165
Also add some helper macros for PROTECT/UNPROTECT that check for
IMMUTABLE. These checks are needed for nearly any use of
PROTECT/UNPROTECT.
Diffstat (limited to 'Zend/zend_types.h')
-rw-r--r-- | Zend/zend_types.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 5492f17c00..4250aabd1f 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -570,6 +570,14 @@ static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) { GC_DEL_FLAGS(p, GC_PROTECTED); \ } while (0) +#define GC_TRY_PROTECT_RECURSION(p) do { \ + if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_PROTECT_RECURSION(p); \ + } while (0) + +#define GC_TRY_UNPROTECT_RECURSION(p) do { \ + if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_UNPROTECT_RECURSION(p); \ + } while (0) + #define Z_IS_RECURSIVE(zval) GC_IS_RECURSIVE(Z_COUNTED(zval)) #define Z_PROTECT_RECURSION(zval) GC_PROTECT_RECURSION(Z_COUNTED(zval)) #define Z_UNPROTECT_RECURSION(zval) GC_UNPROTECT_RECURSION(Z_COUNTED(zval)) |