summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 382fb72beb..b3852619d6 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2533,7 +2533,13 @@ PHP_FUNCTION(extract)
count = php_extract_if_exists(Z_ARRVAL_P(var_array_param), symbol_table);
break;
case EXTR_OVERWRITE:
- count = php_extract_overwrite(Z_ARRVAL_P(var_array_param), symbol_table);
+ {
+ zval zv;
+ /* The array might be stored in a local variable that will be overwritten */
+ ZVAL_COPY(&zv, var_array_param);
+ count = php_extract_overwrite(Z_ARRVAL(zv), symbol_table);
+ zval_ptr_dtor(&zv);
+ }
break;
case EXTR_PREFIX_IF_EXISTS:
count = php_extract_prefix_if_exists(Z_ARRVAL_P(var_array_param), symbol_table, prefix);