diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-28 09:58:01 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-28 09:58:01 +0100 |
commit | 9ad9cc71ff3bb45532b22b4145ea3af90692b364 (patch) | |
tree | 13b4096136c11ee3f0ea7c79477c2e7ec06adeb8 /ext/standard/array.c | |
parent | af37d58cf7b77814b93ea97a8dcd2afb46c4424e (diff) | |
download | php-git-9ad9cc71ff3bb45532b22b4145ea3af90692b364.tar.gz |
Fixed bug #77669
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r-- | ext/standard/array.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index e810defcda..61f0f98f79 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2528,35 +2528,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); |