tony2001 Tue Sep 16 14:36:10 2008 UTC Added files: /php-src/ext/standard/tests/serialize incomplete_class.phpt
Modified files: /php-src/ext/standard php_incomplete_class.h Log: fix segfault with serialize(new __PHP_Incomplete_Class) found by Felipe add test http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_incomplete_class.h?r1=1.24&r2=1.25&diff_format=u Index: php-src/ext/standard/php_incomplete_class.h diff -u php-src/ext/standard/php_incomplete_class.h:1.24 php-src/ext/standard/php_incomplete_class.h:1.25 --- php-src/ext/standard/php_incomplete_class.h:1.24 Mon Dec 31 07:12:16 2007 +++ php-src/ext/standard/php_incomplete_class.h Tue Sep 16 14:36:10 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_incomplete_class.h,v 1.24 2007/12/31 07:12:16 sebastian Exp $ */ +/* $Id: php_incomplete_class.h,v 1.25 2008/09/16 14:36:10 tony2001 Exp $ */ #ifndef PHP_INCOMPLETE_CLASS_H #define PHP_INCOMPLETE_CLASS_H @@ -31,6 +31,14 @@ 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.v) { \ + name_len = sizeof(INCOMPLETE_CLASS) - 1; \ + if (UG(unicode)) { \ + class_name.u = USTR_MAKE(INCOMPLETE_CLASS); \ + } else { \ + class_name.s = estrndup(INCOMPLETE_CLASS, name_len); \ + } \ + } \ free_class_name = 1; \ incomplete_class = 1; \ } else { \ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/incomplete_class.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/serialize/incomplete_class.phpt +++ php-src/ext/standard/tests/serialize/incomplete_class.phpt --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 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php