cvs: /php4 ChangeLog /php4/ext/standard var.c
| From: | Thies C . Arntzen | Date: | Thu, 16 Sep 1999 08:05:17 +0000 |
| Subject: | cvs: /php4 ChangeLog /php4/ext/standard var.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-4508@lists.php.net to get a copy of this message | ||
thies Thu Sep 16 04:05:17 1999 EDT
Modified files:
/php4 ChangeLog
/php4/ext/standard var.c
Log:
php4 now deserialized php3 objects correctly!
php3 will ignore objects serialized by php4 (that's the price we have to pay!)
small fix in deserializing objects with static initializers (thanx boris)
Index: php4/ChangeLog
diff -u php4/ChangeLog:1.108 php4/ChangeLog:1.109
--- php4/ChangeLog:1.108 Wed Sep 15 11:03:05 1999
+++ php4/ChangeLog Thu Sep 16 04:05:16 1999
@@ -2,6 +2,9 @@
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ?? 1999, Version 4.0 Beta 3
+- Small fix in deserializing objects (Thies)
+- PHP4 now serialized Objects as 'O' (not understood by PHP3), but deserializes
+ PHP3 serialized objects as expected. (Thies)
- Made serialize/unserialize work on classes. If the class is known at
unserialize() time, you'll get back a fully working object! (Thies)
- Reworked preg_* functions according to the new PCRE API, which also made
Index: php4/ext/standard/var.c
diff -u php4/ext/standard/var.c:1.25 php4/ext/standard/var.c:1.26
--- php4/ext/standard/var.c:1.25 Wed Sep 15 11:03:06 1999
+++ php4/ext/standard/var.c Thu Sep 16 04:05:17 1999
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var.c,v 1.25 1999/09/15 15:03:06 thies Exp $ */
+/* $Id: var.c,v 1.26 1999/09/16 08:05:17 thies Exp $ */
/* {{{ includes
@@ -205,7 +205,7 @@
if ((*struc)->type == IS_ARRAY) {
slen = sprintf(s, "a:%d:{", i);
} else {
- slen = sprintf(s,
"o:%d:\"%s\":%d:{",(*struc)->value.obj.ce->name_length,(*struc)->value.obj.ce->name,
i);
+ slen = sprintf(s,
"O:%d:\"%s\":%d:{",(*struc)->value.obj.ce->name_length,(*struc)->value.obj.ce->name,
i);
}
STR_CAT(buf, s, slen);
if (i > 0) {
@@ -337,6 +337,7 @@
case 'a':
case 'o':
+ case 'O':
INIT_PZVAL(*rval);
if (cur == 'a') {
@@ -345,39 +346,44 @@
myht = (*rval)->value.ht;
} else {
zend_class_entry *ce;
- char *class_name;
- if (*((*p) + 1) != ':') {
- return 0;
- }
- (*p) += 2;
- q = *p;
- while (**p && **p != ':') {
- (*p)++;
- }
- if (**p != ':') {
- return 0;
- }
- i = atoi(q);
- if (i < 0 || (*p + 3 + i) > max || *((*p) + 1) != '\"' ||
- *((*p) + 2 + i) != '\"' || *((*p) + 3 + i) != ':') {
- return 0;
- }
- (*p) += 2;
- class_name = emalloc(i + 1);
- if (i > 0) {
- memcpy(class_name, *p, i);
- }
- class_name[i] = 0;
- (*p) += i;
+ if (cur == 'O') { /* php4 serialized - we get the class-name */
+ char *class_name;
- if (zend_hash_find(EG(class_table), class_name, i+1, (void **) &ce)==FAILURE) {
- php_error(E_NOTICE, "Unserializing non-existant class: %s! No methods will be
available!", class_name);
+ if (*((*p) + 1) != ':') {
+ return 0;
+ }
+ (*p) += 2;
+ q = *p;
+ while (**p && **p != ':') {
+ (*p)++;
+ }
+ if (**p != ':') {
+ return 0;
+ }
+ i = atoi(q);
+ if (i < 0 || (*p + 3 + i) > max || *((*p) + 1) != '\"' ||
+ *((*p) + 2 + i) != '\"' || *((*p) + 3 + i) != ':') {
+ return 0;
+ }
+ (*p) += 2;
+ class_name = emalloc(i + 1);
+ if (i > 0) {
+ memcpy(class_name, *p, i);
+ }
+ class_name[i] = 0;
+ (*p) += i;
+
+ if (zend_hash_find(EG(class_table), class_name, i+1, (void **) &ce)==FAILURE) {
+ php_error(E_NOTICE, "Unserializing non-existant class: %s! No methods will be
available!", class_name);
+ ce = &zend_standard_class_def;
+ }
+
+ efree(class_name);
+ } else { /* old php3 data 'o' */
ce = &zend_standard_class_def;
}
- efree(class_name);
-
object_init_ex(*rval,ce);
myht = (*rval)->value.obj.properties;
}
@@ -415,7 +421,7 @@
zend_hash_index_update(myht, key->value.lval, &data, sizeof(data), NULL);
break;
case IS_STRING:
- zend_hash_add(myht, key->value.str.val, key->value.str.len + 1, &data,
sizeof(data), NULL);
+ zend_hash_update(myht, key->value.str.val, key->value.str.len + 1, &data,
sizeof(data), NULL);
break;
}
pval_destructor(key);