Browse Source

We should keep one refcount to resource

pull/1490/merge
Xinchen Hui 10 years ago
parent
commit
d5b78cec64
  1. 17
      Zend/tests/bug70398.phpt
  2. 5
      Zend/zend_builtin_functions.c

17
Zend/tests/bug70398.phpt

@ -5,13 +5,14 @@ Bug #70398 (SIGSEGV, Segmentation fault zend_ast_destroy_ex)
define("FILE_STREAM", fopen("php://temp", "r"));
define("FILE_STREAMS", array(fopen("php://temp", "r")));
$array = array(
fopen("php://temp", "r"),
);
define("FILE_STREAMS", $array);
var_dump(FILE_STREAM);
var_dump(FILE_STREAMS);
?>
OK
--EXPECT--
OK
--EXPECTF--
resource(%d) of type (stream)
array(1) {
[0]=>
resource(%d) of type (stream)
}

5
Zend/zend_builtin_functions.c

@ -780,10 +780,11 @@ static void copy_constant_array(zval *dst, zval *src) /* {{{ */
if (!Z_IMMUTABLE_P(val)) {
copy_constant_array(new_val, val);
}
} else if (Z_TYPE_INFO_P(val) == IS_RESOURCE_EX) {
Z_TYPE_INFO_P(new_val) &= ~(IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT);
} else if (Z_REFCOUNTED_P(val)) {
Z_ADDREF_P(val);
if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_RESOURCE_EX)) {
Z_TYPE_INFO_P(new_val) &= ~(IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT);
}
}
} ZEND_HASH_FOREACH_END();
}

Loading…
Cancel
Save