summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_API.h12
-rw-r--r--ext/standard/array.c2
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++;
}