summaryrefslogtreecommitdiff
path: root/ext/spl
diff options
context:
space:
mode:
authorEtienne Kneuss <colder@php.net>2008-09-29 22:42:49 +0000
committerEtienne Kneuss <colder@php.net>2008-09-29 22:42:49 +0000
commit41493606e6ee6775ed26afc186ea312bf0b48ece (patch)
tree4241505a1740bf82528da82e48137230224f3a2e /ext/spl
parent3b3112c2b6d2b4c838767dea27619dedae7ba57b (diff)
downloadphp-git-41493606e6ee6775ed26afc186ea312bf0b48ece.tar.gz
Fix #46192 (Serialization of ArrayObject with objects as storage)
Diffstat (limited to 'ext/spl')
-rwxr-xr-xext/spl/spl_array.c2
-rw-r--r--ext/spl/tests/array_025.phpt40
2 files changed, 41 insertions, 1 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 6f0bda0e2e..411c5ec47f 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -1594,7 +1594,7 @@ void spl_array_unserialize_helper(spl_array_object *intern, const unsigned char
++p;
if (*p!='m') {
- if (*p!='a') {
+ if (*p!='a' && *p!='O' && *p!='C') {
goto outexcept;
}
intern->ar_flags &= ~SPL_ARRAY_CLONE_MASK;
diff --git a/ext/spl/tests/array_025.phpt b/ext/spl/tests/array_025.phpt
new file mode 100644
index 0000000000..35893ea1ea
--- /dev/null
+++ b/ext/spl/tests/array_025.phpt
@@ -0,0 +1,40 @@
+--TEST--
+SPL: ArrayObject serialize with an object as storage
+--FILE--
+<?php
+$obj1 = new ArrayObject(new ArrayObject(array(1,2)));
+$s = serialize($obj1);
+$obj2 = unserialize($s);
+
+print_r($obj1);
+echo "$s\n";
+print_r($obj2);
+?>
+--EXPECT--
+ArrayObject Object
+(
+ [storage:ArrayObject:private] => ArrayObject Object
+ (
+ [storage:ArrayObject:private] => Array
+ (
+ [0] => 1
+ [1] => 2
+ )
+
+ )
+
+)
+C:11:"ArrayObject":76:{x:i:0;C:11:"ArrayObject":37:{x:i:0;a:2:{i:0;i:1;i:1;i:2;};m:a:0:{}};m:a:0:{}}
+ArrayObject Object
+(
+ [storage:ArrayObject:private] => ArrayObject Object
+ (
+ [storage:ArrayObject:private] => Array
+ (
+ [0] => 1
+ [1] => 2
+ )
+
+ )
+
+)