From 7e048fb5047e8ac72983240431fa6f96ddcfc7fb Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Thu, 6 Aug 2026 17:46:07 +0530 Subject: [PATCH 1/3] Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty --- ext/standard/tests/serialize/gh23082.phpt | 25 +++++++++++++++++++++++ main/main.c | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 ext/standard/tests/serialize/gh23082.phpt diff --git a/ext/standard/tests/serialize/gh23082.phpt b/ext/standard/tests/serialize/gh23082.phpt new file mode 100644 index 000000000000..6bcff4402eba --- /dev/null +++ b/ext/standard/tests/serialize/gh23082.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug GH-23082: Restoring unserialize_callback_func to an empty string +--INI-- +display_errors=1 +--FILE-- + +--EXPECT-- +string(0) "" +string(11) "my_callback" +string(0) "" 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) From e4e03fb16cb69309ff21abadeab55eb331c3d85b Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Thu, 6 Aug 2026 19:33:01 +0530 Subject: [PATCH 2/3] Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty --- ext/standard/var_unserializer.re | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index 27647c907d3a..add4cd952e63 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 || ZSTR_LEN(PG(unserialize_callback_func))) { incomplete_class = 1; ce = PHP_IC_ENTRY; break; From 2424b2c63df8f7958d7cde29fbce5f50998b6d7d Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Thu, 6 Aug 2026 19:33:57 +0530 Subject: [PATCH 3/3] Zend: Normalize empty string to NULL in OnUpdateStrNotEmpty --- ext/standard/var_unserializer.re | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index add4cd952e63..4b74e43619b7 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 || ZSTR_LEN(PG(unserialize_callback_func))) { + if (PG(unserialize_callback_func) == NULL || ZSTR_LEN(PG(unserialize_callback_func)) == 0) { incomplete_class = 1; ce = PHP_IC_ENTRY; break;