From 7af08c0c346b836e90fa07a67bc852370f34c862 Mon Sep 17 00:00:00 2001 From: Andrey Hristov Date: Sun, 11 Jul 2004 18:18:05 +0000 Subject: [PATCH] fixing bug 29038: EXTR_PREFIX_SAME is prevented from creating a new variable when the key is a empty string. EXTR_PREFIX_ALL is also prevented from doing that, but works for numbers. --- ext/standard/array.c | 2 +- .../tests/general_functions/bug29038.phpt | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 ext/standard/tests/general_functions/bug29038.phpt diff --git a/ext/standard/array.c b/ext/standard/array.c index e7bc0a8e43..b7a690b899 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1342,7 +1342,7 @@ PHP_FUNCTION(extract) /* break omitted intentionally */ case EXTR_PREFIX_ALL: - if (final_name.len == 0) { + if (final_name.len == 0 && var_name_len != 0) { smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix)); smart_str_appendc(&final_name, '_'); smart_str_appendl(&final_name, var_name, var_name_len); diff --git a/ext/standard/tests/general_functions/bug29038.phpt b/ext/standard/tests/general_functions/bug29038.phpt new file mode 100644 index 0000000000..a92139cbd6 --- /dev/null +++ b/ext/standard/tests/general_functions/bug29038.phpt @@ -0,0 +1,74 @@ +--TEST-- +bug #29039 (extract(), EXTR_PREFIX_SAME option prefixes empty strings) +--FILE-- + 1),EXTR_PREFIX_SAME,"prefix"); + echo "Extracted:"; + var_dump($c); + print_r(get_defined_vars()); +} +function f2() { + $a = 1; + $c = extract(array("a" => 1),EXTR_PREFIX_SAME,"prefix"); + echo "Extracted:"; + var_dump($c); + print_r(get_defined_vars()); +} +function f3() { + $a = 1; + $c = extract(array("a" => 1),EXTR_PREFIX_ALL,"prefix"); + echo "Extracted:"; + var_dump($c); + print_r(get_defined_vars()); +} +function f4() { + $c = extract(array("" => 1),EXTR_PREFIX_ALL,"prefix"); + echo "Extracted:"; + var_dump($c); + print_r(get_defined_vars()); +} +function f5() { + $c = extract(array("111" => 1),EXTR_PREFIX_ALL,"prefix"); + echo "Extracted:"; + var_dump($c); + print_r(get_defined_vars()); +} + +f1(); +f2(); +f3(); +f4(); +f5(); +?> +--EXPECT-- +Extracted:int(0) +Array +( + [c] => 0 +) +Extracted:int(1) +Array +( + [a] => 1 + [prefix_a] => 1 + [c] => 1 +) +Extracted:int(1) +Array +( + [a] => 1 + [prefix_a] => 1 + [c] => 1 +) +Extracted:int(0) +Array +( + [c] => 0 +) +Extracted:int(1) +Array +( + [prefix_111] => 1 + [c] => 1 +) \ No newline at end of file -- 2.40.0