From: Xinchen Hui Date: Fri, 21 Feb 2014 13:12:12 +0000 (+0800) Subject: Fixed segfault due to missing REFCOUNTED check X-Git-Tag: POST_PHPNG_MERGE~412^2~597^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b7ca1c7560a4e2d5d527ba429e0a5fa306624c6;p=php Fixed segfault due to missing REFCOUNTED check --- diff --git a/Zend/zend.h b/Zend/zend.h index 44266c29ce..b62a022e42 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -733,11 +733,11 @@ END_EXTERN_C() Z_SET_REFCOUNT_PP(ppzv_dest, refcount); \ } -#define SEPARATE_ARG_IF_REF(varptr) \ - if (Z_ISREF_P(varptr)) { \ - ZVAL_DUP(varptr, Z_REFVAL_P(varptr)); \ - } else { \ - Z_ADDREF_P(varptr); \ +#define SEPARATE_ARG_IF_REF(varptr) \ + if (Z_ISREF_P(varptr)) { \ + ZVAL_DUP(varptr, Z_REFVAL_P(varptr)); \ + } else if (IS_REFCOUNTED(Z_TYPE_P(varptr))) { \ + Z_ADDREF_P(varptr); \ } #define READY_TO_DESTROY(zv) \ diff --git a/Zend/zend_API.c b/Zend/zend_API.c index e2737a270c..f1ba871712 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -176,7 +176,9 @@ ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array TS while (param_count-->0) { zval *param = p-(arg_count--); - Z_ADDREF_P(param); + if (Z_REFCOUNTED_P(param)) { + Z_ADDREF_P(param); + } add_next_index_zval(argument_array, param); }