From 4a6e6077ef1ba1cd2b94c0f4af7e342393043538 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois <2144837+alexandre-daubois@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:18:33 +0100 Subject: [PATCH] Core: fix missing deprecation when accessing null array key with JIT (#20883) --- NEWS | 2 ++ Zend/Optimizer/sccp.c | 3 +-- ext/opcache/tests/jit/fetch_dim_r_001.phpt | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 07c66ec833e..c6bedf8ed11 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ PHP NEWS . Fixed bug GH-21059 (Segfault when preloading constant AST closure). (ilutov) . Fixed bug GH-21072 (Crash on (unset) cast in constant expression). (arshidkv12) + . Fix deprecation now showing when accessing null key of an array with JIT. + (alexandre-daubois) - Windows: . Fixed compilation with clang (missing intrin.h include). (Kévin Dunglas) diff --git a/Zend/Optimizer/sccp.c b/Zend/Optimizer/sccp.c index 7e2fc2db1b2..87d7507d4f9 100644 --- a/Zend/Optimizer/sccp.c +++ b/Zend/Optimizer/sccp.c @@ -363,8 +363,7 @@ static inline zend_result zval_to_string_offset(zend_long *result, zval *op) { static inline zend_result fetch_array_elem(zval **result, zval *op1, zval *op2) { switch (Z_TYPE_P(op2)) { case IS_NULL: - *result = zend_hash_find(Z_ARR_P(op1), ZSTR_EMPTY_ALLOC()); - return SUCCESS; + return FAILURE; case IS_FALSE: *result = zend_hash_index_find(Z_ARR_P(op1), 0); return SUCCESS; diff --git a/ext/opcache/tests/jit/fetch_dim_r_001.phpt b/ext/opcache/tests/jit/fetch_dim_r_001.phpt index 3ff56263db6..819ec7edca6 100644 --- a/ext/opcache/tests/jit/fetch_dim_r_001.phpt +++ b/ext/opcache/tests/jit/fetch_dim_r_001.phpt @@ -30,7 +30,7 @@ function foo() { } foo(); ?> ---EXPECT-- +--EXPECTF-- int(1) int(3) int(2) @@ -38,6 +38,8 @@ int(1) int(3) int(1) int(2) + +Deprecated: Using null as an array offset is deprecated, use an empty string instead in %s on line %d int(4) int(5) int(5)