diff options
-rw-r--r-- | ext/standard/php_incomplete_class.h | 4 | ||||
-rw-r--r-- | ext/standard/tests/serialize/incomplete_class.phpt | 27 |
2 files changed, 31 insertions, 0 deletions
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h index 268c154ac0..1f12076ad5 100644 --- a/ext/standard/php_incomplete_class.h +++ b/ext/standard/php_incomplete_class.h @@ -31,6 +31,10 @@ if (Z_OBJ_HT_P(struc)->get_class_entry && \ Z_OBJCE_P(struc) == BG(incomplete_class)) { \ class_name = php_lookup_class_name(struc, &name_len); \ + if (!class_name) { \ + name_len = sizeof(INCOMPLETE_CLASS) - 1; \ + class_name = estrndup(INCOMPLETE_CLASS, name_len); \ + } \ free_class_name = 1; \ incomplete_class = 1; \ } else { \ diff --git a/ext/standard/tests/serialize/incomplete_class.phpt b/ext/standard/tests/serialize/incomplete_class.phpt new file mode 100644 index 0000000000..8280485516 --- /dev/null +++ b/ext/standard/tests/serialize/incomplete_class.phpt @@ -0,0 +1,27 @@ +--TEST-- +(un)serializing __PHP_Incomplete_Class instance +--FILE-- +<?php + +$d = serialize(new __PHP_Incomplete_Class); +$o = unserialize($d); +var_dump($o); + +$o->test = "a"; +var_dump($o->test); +var_dump($o->test2); + +echo "Done\n"; +?> +--EXPECTF-- +object(__PHP_Incomplete_Class)#%d (0) { +} + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d +NULL +Done |