diff options
-rw-r--r-- | ext/standard/array.c | 2 | ||||
-rw-r--r-- | ext/standard/tests/general_functions/bug29038.phpt | 74 |
2 files changed, 75 insertions, 1 deletions
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-- +<?php +function f1() { + $c = extract(array("" => 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 |