]> granicus.if.org Git - php/commitdiff
fixing bug 29038:
authorAndrey Hristov <andrey@php.net>
Sun, 11 Jul 2004 18:18:05 +0000 (18:18 +0000)
committerAndrey Hristov <andrey@php.net>
Sun, 11 Jul 2004 18:18:05 +0000 (18:18 +0000)
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
ext/standard/tests/general_functions/bug29038.phpt [new file with mode: 0644]

index e7bc0a8e437b6621f84d98e68c96c257e68a0834..b7a690b89977646e63ef7987e81a8cf126d7bb1f 100644 (file)
@@ -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 (file)
index 0000000..a92139c
--- /dev/null
@@ -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