Browse Source

Prevented crash in GC because of incorrect reference counting

pull/12/head
Dmitry Stogov 15 years ago
parent
commit
5c6f0ebeab
  1. 40
      Zend/tests/gc_032.phpt
  2. 2
      Zend/zend_execute.c

40
Zend/tests/gc_032.phpt

@ -0,0 +1,40 @@
--TEST--
GC 032: Crash in GC because of invalid reference counting
--FILE--
<?php
$a = array();
$b =& $a;
$a[0] = $a;
debug_zval_dump($a);
$a = array(array());
$b =& $a;
$a[0][0] = $a;
debug_zval_dump($a);
?>
--EXPECT--
array(1) refcount(1){
[0]=>
array(1) refcount(3){
[0]=>
array(1) refcount(3){
[0]=>
*RECURSION*
}
}
}
array(1) refcount(1){
[0]=>
array(1) refcount(3){
[0]=>
array(1) refcount(1){
[0]=>
array(1) refcount(3){
[0]=>
array(1) refcount(1){
[0]=>
*RECURSION*
}
}
}
}
}

2
Zend/zend_execute.c

@ -714,8 +714,8 @@ static inline zval* zend_assign_to_variable(zval **variable_ptr_ptr, zval *value
ALLOC_ZVAL(variable_ptr);
*variable_ptr_ptr = variable_ptr;
*variable_ptr = *value;
zval_copy_ctor(variable_ptr);
Z_SET_REFCOUNT_P(variable_ptr, 1);
zval_copy_ctor(variable_ptr);
} else {
*variable_ptr_ptr = value;
Z_ADDREF_P(value);

Loading…
Cancel
Save