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/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index 27647c907d3a..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) { + if (PG(unserialize_callback_func) == NULL || ZSTR_LEN(PG(unserialize_callback_func)) == 0) { 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)