From 5d57c052f5dba5f0ca532b8949a7acfe3ca6cea7 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Fri, 7 Aug 2026 11:33:04 +0100 Subject: [PATCH] Fix GH-23082: unserialize_callback_func can no longer be reset to its empty default at runtime By using OnUpdateStr INI handler rather than OnUpdateStrNotEmpty --- .../unserialize_callback_func/gh23082.phpt | 23 +++++++++++++++++++ ext/standard/var_unserializer.re | 2 +- main/main.c | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 ext/standard/tests/serialize/unserialize_callback_func/gh23082.phpt diff --git a/ext/standard/tests/serialize/unserialize_callback_func/gh23082.phpt b/ext/standard/tests/serialize/unserialize_callback_func/gh23082.phpt new file mode 100644 index 000000000000..adbc5e892655 --- /dev/null +++ b/ext/standard/tests/serialize/unserialize_callback_func/gh23082.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug GH-23082: unserialize_callback_func can no longer be reset to its empty default at runtime +--FILE-- + +--EXPECT-- +string(0) "" +string(11) "my_callback" +string(0) "" diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index 27647c907d3a..eca9660c5605 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -1249,7 +1249,7 @@ object ":" uiv ":" ["] { } /* Check for unserialize callback */ - if (PG(unserialize_callback_func) == NULL) { + if (PG(unserialize_callback_func) == NULL || zend_string_equals(PG(unserialize_callback_func), zend_empty_string)) { incomplete_class = 1; ce = PHP_IC_ENTRY; break; diff --git a/main/main.c b/main/main.c index 2eb55c5cff07..0539220de362 100644 --- a/main/main.c +++ b/main/main.c @@ -824,7 +824,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("auto_globals_jit", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, auto_globals_jit, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("short_open_tag", DEFAULT_SHORT_OPEN_TAG, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, short_tags, zend_compiler_globals, compiler_globals) - STD_PHP_INI_ENTRY("unserialize_callback_func", NULL, PHP_INI_ALL, OnUpdateStrNotEmpty, unserialize_callback_func, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("unserialize_callback_func", NULL, PHP_INI_ALL, OnUpdateStr, unserialize_callback_func, php_core_globals, core_globals) STD_PHP_INI_ENTRY("serialize_precision", "-1", PHP_INI_ALL, OnSetSerializePrecision, serialize_precision, php_core_globals, core_globals) STD_PHP_INI_ENTRY("arg_separator.output", "&", PHP_INI_ALL, OnUpdateStrNotEmpty, arg_separator.output, php_core_globals, core_globals) STD_PHP_INI_ENTRY("arg_separator.input", "&", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateStrNotEmpty, arg_separator.input, php_core_globals, core_globals)