From 74c2deecd8a7854e4cb12ab3e48379cde2c0b19c Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 5 Mar 2014 18:11:22 +0800 Subject: [PATCH] Fixed refcounted --- Zend/zend_API.h | 12 ++++++------ ext/standard/array.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Zend/zend_API.h b/Zend/zend_API.h index d3817ab307..da401fe951 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -677,18 +677,18 @@ END_EXTERN_C() \ if ((orig_var = zend_hash_str_find(symtable, (name), (name_length))) != NULL \ && Z_ISREF_P(orig_var)) { \ - Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(orig_var)); \ - /*???Z_SET_ISREF_P(var);*/ \ - \ - if (_refcount) { \ - Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(var) + _refcount - 1); \ + if (Z_REFCOUNTED_P(var)) { \ + Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(orig_var)); \ + if (_refcount) { \ + Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(var) + _refcount - 1); \ + } \ } \ zval_dtor(orig_var); \ ZVAL_COPY_VALUE(orig_var, var); \ /*???FREE_ZVAL(var);*/ \ } else { \ /*???Z_SET_ISREF_TO_P(var, _is_ref);*/ \ - if (_refcount) { \ + if (_refcount && Z_REFCOUNTED_P(var)) { \ Z_SET_REFCOUNT_P(var, _refcount); \ } \ zend_hash_str_update(symtable, (name), (name_length), var); \ diff --git a/ext/standard/array.c b/ext/standard/array.c index 90bbdc03ee..aefaef1d87 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1392,7 +1392,7 @@ PHP_FUNCTION(extract) } } else { ZVAL_DUP(&data, entry); - ZEND_SET_SYMBOL_WITH_LENGTH(EG(active_symbol_table), Z_STRVAL(final_name), Z_STRLEN(final_name) + 1, &data, 1, 0); + ZEND_SET_SYMBOL_WITH_LENGTH(EG(active_symbol_table), Z_STRVAL(final_name), Z_STRLEN(final_name), &data, 1, 0); } count++; } -- 2.40.0