summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-02-28 09:58:30 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-02-28 09:58:47 +0100
commit019fd1d9bad171ad338fd7fe60dd5b2e6236e489 (patch)
treed6243b497205b01a326e5a3f1f190ea9768e88b2 /ext/standard/array.c
parent461e140afc40040a055a16746b8669372caf8d99 (diff)
parent9ad9cc71ff3bb45532b22b4145ea3af90692b364 (diff)
downloadphp-git-019fd1d9bad171ad338fd7fe60dd5b2e6236e489.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index c64dc4beeb..eb4cd6b417 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2485,35 +2485,33 @@ PHP_FUNCTION(extract)
break;
}
} else {
+ /* The array might be stored in a local variable that will be overwritten */
+ zval array_copy;
+ ZVAL_COPY(&array_copy, var_array_param);
switch (extract_type) {
case EXTR_IF_EXISTS:
- count = php_extract_if_exists(Z_ARRVAL_P(var_array_param), symbol_table);
+ count = php_extract_if_exists(Z_ARRVAL(array_copy), symbol_table);
break;
case EXTR_OVERWRITE:
- {
- 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);
- }
+ count = php_extract_overwrite(Z_ARRVAL(array_copy), symbol_table);
break;
case EXTR_PREFIX_IF_EXISTS:
- count = php_extract_prefix_if_exists(Z_ARRVAL_P(var_array_param), symbol_table, prefix);
+ count = php_extract_prefix_if_exists(Z_ARRVAL(array_copy), symbol_table, prefix);
break;
case EXTR_PREFIX_SAME:
- count = php_extract_prefix_same(Z_ARRVAL_P(var_array_param), symbol_table, prefix);
+ count = php_extract_prefix_same(Z_ARRVAL(array_copy), symbol_table, prefix);
break;
case EXTR_PREFIX_ALL:
- count = php_extract_prefix_all(Z_ARRVAL_P(var_array_param), symbol_table, prefix);
+ count = php_extract_prefix_all(Z_ARRVAL(array_copy), symbol_table, prefix);
break;
case EXTR_PREFIX_INVALID:
- count = php_extract_prefix_invalid(Z_ARRVAL_P(var_array_param), symbol_table, prefix);
+ count = php_extract_prefix_invalid(Z_ARRVAL(array_copy), symbol_table, prefix);
break;
default:
- count = php_extract_skip(Z_ARRVAL_P(var_array_param), symbol_table);
+ count = php_extract_skip(Z_ARRVAL(array_copy), symbol_table);
break;
}
+ zval_ptr_dtor(&array_copy);
}
RETURN_LONG(count);