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

Reply via email to