Skip to content

Commit 95306bb

Browse files
try fix circleci
1 parent 1bf2dbd commit 95306bb

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

ext/opcache/jit/zend_jit_helpers.c

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -500,16 +500,33 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim,
500500
}
501501
ZEND_FALLTHROUGH;
502502
case IS_NULL:
503-
retval = zend_hash_find(ht, ZSTR_EMPTY_ALLOC());
504-
if (!retval) {
505-
ZVAL_NULL(result);
506-
} else {
507-
ZVAL_COPY_DEREF(result, retval);
503+
/* The array may be destroyed while throwing the notice.
504+
* Temporarily increase the refcount to detect this situation. */
505+
if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
506+
GC_ADDREF(ht);
508507
}
509-
508+
execute_data = EG(current_execute_data);
509+
opline = EX(opline);
510510
zend_error(E_DEPRECATED, "Using null as an array offset is deprecated, use an empty string instead");
511-
512-
return;
511+
if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
512+
zend_array_destroy(ht);
513+
if (opline->result_type & (IS_VAR | IS_TMP_VAR)) {
514+
if (EG(exception)) {
515+
ZVAL_UNDEF(EX_VAR(opline->result.var));
516+
} else {
517+
ZVAL_NULL(EX_VAR(opline->result.var));
518+
}
519+
}
520+
return;
521+
}
522+
if (EG(exception)) {
523+
if (opline->result_type & (IS_VAR | IS_TMP_VAR)) {
524+
ZVAL_UNDEF(EX_VAR(opline->result.var));
525+
}
526+
return;
527+
}
528+
offset_key = ZSTR_EMPTY_ALLOC();
529+
goto str_index;
513530
case IS_DOUBLE:
514531
hval = zend_dval_to_lval(Z_DVAL_P(dim));
515532
if (!zend_is_long_compatible(Z_DVAL_P(dim), hval)) {

0 commit comments

Comments
 (0)