03 Sep 2015, PHP 7.0.0 RC 2
- Core:
+ . Fixed bug #70398 (SIGSEGV, Segmentation fault zend_ast_destroy_ex)
+ (Dmitry, Bob, Laruence)
. Fixed bug #70332 (Wrong behavior while returning reference on object).
(Laruence, Dmitry)
. Fixed bug #70300 (Syntactical inconsistency with new group use syntax).
--- /dev/null
+--TEST--
+Bug #70398 (SIGSEGV, Segmentation fault zend_ast_destroy_ex)
+--FILE--
+<?php
+
+define("FILE_STREAM", fopen("php://temp", "r"));
+
+
+$array = array(
+ fopen("php://temp", "r"),
+);
+
+define("FILE_STREAMS", $array);
+?>
+OK
+--EXPECT--
+OK
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);
}
ZEND_PARSE_PARAMETERS_END();
#endif
- if(non_cs) {
+ if (non_cs) {
case_sensitive = 0;
}
case IS_STRING:
case IS_FALSE:
case IS_TRUE:
- case IS_RESOURCE:
case IS_NULL:
break;
+ case IS_RESOURCE:
+ ZVAL_COPY(&val_free, val);
+ /* TODO: better solution than this tricky disable dtor on resource? */
+ Z_TYPE_INFO(val_free) &= ~(IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT);
+ val = &val_free;
+ break;
case IS_ARRAY:
if (!Z_IMMUTABLE_P(val)) {
if (!validate_constant_array(Z_ARRVAL_P(val))) {