summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-07-17 15:55:34 +0800
committerXinchen Hui <laruence@php.net>2015-07-17 15:55:34 +0800
commit7d07afd6c18f3d83ec21248d65a076b387aa05e9 (patch)
treec33a00eef2bf9c66dbf92d20eaccc0c2983c24df /Zend/zend_execute.c
parent0dce8373cdc84c9422dbb94910833d5d34c3d73b (diff)
downloadphp-git-7d07afd6c18f3d83ec21248d65a076b387aa05e9.tar.gz
Fixed bug #70089 (segfault at ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER ())
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 27841eb119..2d1bd5e3d0 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -91,12 +91,14 @@ static const zend_internal_function zend_pass_function = {
#define READY_TO_DESTROY(zv) \
(zv && Z_REFCOUNTED_P(zv) && Z_REFCOUNT_P(zv) == 1)
-#define EXTRACT_ZVAL_PTR(zv) do { \
- zval *__zv = (zv); \
- if (Z_TYPE_P(__zv) == IS_INDIRECT) { \
- ZVAL_COPY(__zv, Z_INDIRECT_P(__zv)); \
- } \
- } while (0)
+#define EXTRACT_ZVAL_PTR(zv, check_null) do { \
+ zval *__zv = (zv); \
+ if (Z_TYPE_P(__zv) == IS_INDIRECT) { \
+ if (!(check_null) || Z_INDIRECT_P(__zv)) { \
+ ZVAL_COPY(__zv, Z_INDIRECT_P(__zv)); \
+ } \
+ } \
+} while (0)
#define FREE_OP(should_free) \
if (should_free) { \