cvs: php4 /ext/standard var.c /ext/standard/tests/serialize 002.phpt

From: Date: Sat, 01 Dec 2001 15:06:37 +0000
Subject: cvs: php4 /ext/standard var.c /ext/standard/tests/serialize 002.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-8347@lists.php.net to get a copy of this message
thies Sat Dec 1 10:06:37 2001 EDT Added files: /php4/ext/standard/tests/serialize 002.phpt Modified files: /php4/ext/standard var.c Log: serialized data would be incoorect if __sleep() returned a variable-name which is non-existant in the object. submitted by: Bernd Roemer <berndr@bonn.edu> Index: php4/ext/standard/var.c diff -u php4/ext/standard/var.c:1.118 php4/ext/standard/var.c:1.119 --- php4/ext/standard/var.c:1.118 Sat Nov 10 16:18:34 2001 +++ php4/ext/standard/var.c Sat Dec 1 10:06:37 2001 @@ -199,25 +199,24 @@ php_var_serialize_class_name(buf, struc TSRMLS_CC); - smart_str_append_long(buf, count); - smart_str_appendl(buf, ":{", 2); - if (count > 0) { char *key; zval **d, **name; ulong index; HashPosition pos; int i; - - zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr), &pos); + int cundef; + smart_str buf2={0}; + cundef=0; + zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr), &pos); for (;; zend_hash_move_forward_ex(HASH_OF(retval_ptr), &pos)) { i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), &key, NULL, &index, 0, &pos); if (i == HASH_KEY_NON_EXISTANT) break; - + zend_hash_get_current_data_ex(HASH_OF(retval_ptr), (void **) &name, &pos); @@ -230,12 +229,20 @@ if (zend_hash_find(Z_OBJPROP_PP(struc), Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) { - php_var_serialize_string(buf, Z_STRVAL_PP(name), + php_var_serialize_string(&buf2, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); - php_var_serialize_intern(buf, d, var_hash TSRMLS_CC); + php_var_serialize_intern(&buf2, d, var_hash TSRMLS_CC); + } else { + cundef++; } } + smart_str_append_long(buf, count-cundef); + smart_str_appendl(buf, ":{", 2); + smart_str_appendl(buf,buf2.c,buf2.len); + smart_str_free(&buf2); } + + smart_str_appendc(buf, '}'); } Index: php4/ext/standard/tests/serialize/002.phpt +++ php4/ext/standard/tests/serialize/002.phpt --TEST-- serialize() (Bug #14293) --POST-- --GET-- --FILE-- <?php class t { function t() { $this->a = 'hello'; } function __sleep() { echo "__sleep called\n"; return array('a','b'); } } $t = new t(); $data = serialize($t); echo "$data\n"; $t = unserialize($data); var_dump($t); ?> --EXPECT-- __sleep called O:1:"t":1:{s:1:"a";s:5:"hello";} object(t)(1) { ["a"]=> string(5) "hello" }

« previous php.cvs (#8347) next »