]> granicus.if.org Git - php/commitdiff
Accessing globals from a destructor causes memory corruption
authorMarcus Boerger <helly@php.net>
Thu, 3 Jul 2003 14:06:51 +0000 (14:06 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 3 Jul 2003 14:06:51 +0000 (14:06 +0000)
tests/classes/destructor_and_globals.phpt [new file with mode: 0755]

diff --git a/tests/classes/destructor_and_globals.phpt b/tests/classes/destructor_and_globals.phpt
new file mode 100755 (executable)
index 0000000..9caf0f1
--- /dev/null
@@ -0,0 +1,56 @@
+--TEST--
+ZE2 accessing globals from destructor in shutdown
+--FILE--
+<?php
+$test_cnt = 0;
+$test_num = 0;
+
+function Show() {
+  global $test_cnt;
+  echo "Count: $test_cnt\n";
+}
+
+class counter {
+  protected $id;
+
+  public function __construct() {
+    global $test_cnt, $test_num;
+    $test_cnt++;
+    $this->id = $test_num++;
+  }
+
+  public function Show() {
+    echo 'Id: '.$this->id."\n";
+  }
+
+  // try protected here
+  public function __destruct() {
+    global $test_cnt;
+    $test_cnt--;
+  }
+  
+  static public function destroy(&$obj) {
+       $obj = NULL;
+       }
+}
+Show();
+$obj1 = new counter;
+$obj1->Show();
+Show();
+$obj2 = new counter;
+$obj2->Show();
+Show();
+counter::destroy($obj1);
+Show();
+// or uncomment this line and it works
+//counter::destroy($obj2);
+echo "Done\n";
+?>
+--EXPECT--
+Count: 0
+Id: 0
+Count: 1
+Id: 1
+Count: 2
+Count: 1
+Done