diff --git a/ext/standard/tests/serialize/unserialize_abstract_class.phpt b/ext/standard/tests/serialize/unserialize_abstract_class.phpt new file mode 100644 index 00000000000..e835e504669 --- /dev/null +++ b/ext/standard/tests/serialize/unserialize_abstract_class.phpt @@ -0,0 +1,15 @@ +--TEST-- +Unserializing an abstract class should fail +--FILE-- +getMessage(), "\n"; +} + +?> +--EXPECT-- +Cannot instantiate abstract class RecursiveFilterIterator diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index ba425e692ec..fcc68dc4312 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -1144,7 +1144,11 @@ object ":" uiv ":" ["] { return 0; } - object_init_ex(rval, ce); + if (object_init_ex(rval, ce) == FAILURE) { + zend_string_release_ex(class_name, 0); + return 0; + } + if (incomplete_class) { php_store_class_name(rval, ZSTR_VAL(class_name), len2); }