diff options
author | Xinchen Hui <laruence@php.net> | 2015-07-17 15:55:34 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2015-07-17 15:55:34 +0800 |
commit | 7d07afd6c18f3d83ec21248d65a076b387aa05e9 (patch) | |
tree | c33a00eef2bf9c66dbf92d20eaccc0c2983c24df /Zend/zend_execute.c | |
parent | 0dce8373cdc84c9422dbb94910833d5d34c3d73b (diff) | |
download | php-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.c | 14 |
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) { \ |