Should I fill a bug notification report or so? (where are them? ;-))
Andrey Hristov wrote:
Francisco M. Marzoa Alonso wrote:
Try this code:
<pre>
<?php
$Arr = array();
$Arr['self'] = &$Arr;
var_dump ( $Arr );
$serdata = serialize ($Arr);
$Arr2 = unserialize ( $serdata );
echo "\n\n";
var_dump ( $Arr2 );
?>
</pre>
The second array is expected to be exactly as $Arr, but it doesn't.
This is the output for that code:
array(1) {
["self"]=>
array(1) {
["self"]=>
*RECURSION*
}
}
array(1) {
["self"]=>
array(1) {
["self"]=>
NULL
}
}
As you can see the second array has a NULL value where the first one
had a recursive reference.
Can this be considered as a bug of PHP serialization system?
Looks as such.
While looking at this one, I cooked a little example which cores ZE2
(5.1.0-dev)
<?php
class a{}
class b{}
$a=new a;
$b=new b;
$a->a=$b;
$c=array($a,$b);
var_dump($c,$d=serialize($c));
var_dump($e=unserialize($d));
$d[0]->a->prop=1;
var_dump($d);
?>
If one looks at it she will see that I have an error in the example
and instead
of $d[0]->a I have to use $e[0] , still a Segmentation Fault is not
tolerable.
This works ok :
<?php
class a{}
class b{}
$a=new a;
$b=new b;
$a->a=$b;
$c=array($a,$b);
var_dump($c, $d=serialize($c));
var_dump($e=unserialize($d));
$d[0]->a->prop=1;
var_dump($d);
?>
$e is :
array(2) {
[0]=>
object(a)#3 (1) {
["a"]=>
object(b)#4 (1) {
["prop"]=>
int(1)
}
}
[1]=>
object(b)#4 (1) {
["prop"]=>
int(1)
}
}
Andrey
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php