]> granicus.if.org Git - php/commitdiff
-Fixed bug #30074 (apparent symbol table error with extract($blah, EXTR_REFS))
authorBrian Shire <shire@php.net>
Tue, 19 Dec 2006 08:02:48 +0000 (08:02 +0000)
committerBrian Shire <shire@php.net>
Tue, 19 Dec 2006 08:02:48 +0000 (08:02 +0000)
# appoligies, I did this in reverse (applied to PHP_5_2) I should have MFH.

ext/standard/array.c
ext/standard/tests/array/bug30074.phpt [new file with mode: 0644]

index a328fc5f7205f65bb3efcc73a146091b6eddf543..7b429f93e7808c6c1db3dad79ebad2e450e8238d 100644 (file)
@@ -1492,7 +1492,7 @@ PHP_FUNCTION(extract)
 
                                        *orig_var = *entry;
                                } else {
-                                       if (var_array->refcount > 1) {
+                                       if (var_array->refcount > 1 || *entry == EG(uninitialized_zval_ptr)) {
                                                SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
                                        } else {
                                                (*entry)->is_ref = 1;
diff --git a/ext/standard/tests/array/bug30074.phpt b/ext/standard/tests/array/bug30074.phpt
new file mode 100644 (file)
index 0000000..7720fe0
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Bug #30074 (EG(uninitialized_zval_ptr) gets set to reference using EXTR_REFS, affecting later values)
+--FILE--
+<?php
+error_reporting(E_ALL & ~E_NOTICE);   // We don't want the notice for $undefined
+$result = extract(array('a'=>$undefined), EXTR_REFS); 
+var_dump(array($a));
+echo "Done\n";
+?>
+--EXPECT--
+array(1) {
+  [0]=>
+  NULL
+}
+Done