iliaa           Sun Aug 10 23:22:24 2003 EDT

  Added files:                 
    /php-src/ext/standard/tests/serialize       bug21957.phpt 

  Modified files:              
    /php-src/ext/standard       var.c 
  Log:
  Fixed bug #21957 (serialize() mangles objects with __sleep).
  
  
Index: php-src/ext/standard/var.c
diff -u php-src/ext/standard/var.c:1.168 php-src/ext/standard/var.c:1.169
--- php-src/ext/standard/var.c:1.168    Tue Aug  5 05:19:38 2003
+++ php-src/ext/standard/var.c  Sun Aug 10 23:22:24 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: var.c,v 1.168 2003/08/05 09:19:38 stas Exp $ */
+/* $Id: var.c,v 1.169 2003/08/11 03:22:24 iliaa Exp $ */
 
 
 /* {{{ includes 
@@ -483,7 +483,7 @@
                                                "serialize.");
                                /* we should still add element even if it's not OK,
                                   since we already wrote the length of the array 
before */
-                               smart_str_appendl(buf,"s:0:\"\";N;", 9);
+                               smart_str_appendl(buf,"N;", 2);
                                continue;
                        }
 
@@ -565,6 +565,9 @@
                                                                php_error_docref(NULL 
TSRMLS_CC, E_NOTICE, "__sleep should return an array only "
                                                                                       
          "containing the names of instance-variables to "
                                                                                       
          "serialize.");
+                                                               /* we should still add 
element even if it's not OK,
+                                                               since we already wrote 
the length of the array before */
+                                                               
smart_str_appendl(buf,"N;", 2);
                                                        }
                                                        
                                                        zval_ptr_dtor(&retval_ptr);

Index: php-src/ext/standard/tests/serialize/bug21957.phpt
+++ php-src/ext/standard/tests/serialize/bug21957.phpt
--TEST--
Bug #21957 (serialize() mangles objects with __sleep)
--FILE--
<?php 
class test
{
        var $a, $b;

        function test()
        {
                $this->a = 7;
                $this->b = 2;
        }

        function __sleep()
        {
                $this->b = 0;
        }
}

$t['one'] = 'ABC';
$t['two'] = new test();

var_dump($t);

$s =  @serialize($t);
echo $s . "\n";

var_dump(unserialize($s));
?>
--EXPECT--
array(2) {
  ["one"]=>
  string(3) "ABC"
  ["two"]=>
  object(test)#1 (2) {
    ["a"]=>
    int(7)
    ["b"]=>
    int(2)
  }
}
a:2:{s:3:"one";s:3:"ABC";s:3:"two";N;}
array(2) {
  ["one"]=>
  string(3) "ABC"
  ["two"]=>
  NULL
}



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to