Fixed bug #32799 (crash: calling the corresponding global var during the destruct)

This commit is contained in:
Dmitry Stogov 2005-06-06 10:38:43 +00:00
parent e5d3e07862
commit ce23692663
2 changed files with 23 additions and 0 deletions

21
Zend/tests/bug32799.phpt Executable file
View File

@ -0,0 +1,21 @@
--TEST--
Bug #32799 (crash: calling the corresponding global var during the destruct)
--FILE--
<?php
class test{
public $c=1;
function __destruct (){
$GLOBALS['p']->c++; // no warning
print $GLOBALS['p']->c."\n"; // segfault
var_dump($GLOBALS['p']);
}
}
$p=new test;
$p=null; //destroy the object by a new assignment (segfault)
?>
--EXPECT--
2
object(test)#1 (1) {
["c"]=>
int(2)
}

View File

@ -151,7 +151,9 @@ ZEND_API void zend_objects_store_del_ref(zval *zobject TSRMLS_DC)
EG(objects_store).object_buckets[handle].destructor_called = 1;
if (obj->dtor) {
zobject->refcount++;
obj->dtor(obj->object, handle TSRMLS_CC);
zobject->refcount--;
}
}
if (obj->refcount == 1) {