summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2008-09-16 14:36:39 +0000
committerAntony Dovgal <tony2001@php.net>2008-09-16 14:36:39 +0000
commit03f74b711e112b347d95f4efd3060c7310262907 (patch)
tree14fad3282ec1761b357b50f1967cb06444feb72a
parent8f037b3fe4bf55538d72d70bfd7f1b645a9e3367 (diff)
downloadphp-git-03f74b711e112b347d95f4efd3060c7310262907.tar.gz
MFH
-rw-r--r--ext/standard/php_incomplete_class.h4
-rw-r--r--ext/standard/tests/serialize/incomplete_class.phpt27
2 files changed, 31 insertions, 0 deletions
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
index 5030e6b660..d367209810 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