Bug #55801 [Asn]: Behavior of unserialize has changed
| From: | mike@php.net | Date: | Mon, 03 Oct 2011 11:41:36 +0000 |
| Subject: | Bug #55801 [Asn]: Behavior of unserialize has changed | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-164045@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=55801&edit=1
ID: 55801
Updated by: mike@php.net
Reported by: mapi at pdepend dot org
Summary: Behavior of unserialize has changed
Status: Assigned
Type: Bug
Package: Variables related
Operating System: Linux (Fedora 15)
PHP Version: 5.4.0beta1
Assigned To: mike
Block user comment: N
Private report: N
New Comment:
OTOH, the following working script suggests that this is not the source of
failure:
<?php
class node {
public $parent;
public $nodes = array();
public $path;
public $temp;
function __toString() {
return $this->parent ? $this->parent . "/" . $this->path :
$this->path;
}
function __construct(node $parent = null, $path = ".") {
$this->parent = $parent;
$this->path = $path;
if (is_dir($this)) foreach (scandir($this) as $p) {
if ($p[0] != ".") {
$this->nodes[] = new node($this, $p);
}
}
}
function __sleep() {
$this->temp = serialize($this->nodes);
return array("path", "temp");
}
function __wakeup() {
$this->nodes = unserialize($this->temp);
$this->temp = null;
foreach ($this->nodes as $n) {
$n->parent = $this;
}
}
}
$tree = new node(null, @$_SERVER["argv"][1] ?: ".");
$s = serialize($tree);
var_dump($s);
$temp = unserialize($s);
print_r($temp);
Previous Comments:
------------------------------------------------------------------------
[2011-10-03 11:15:26] mike@php.net
Ok, I think I found the problematic POC:
in line 486 of PHP_Depend_Code_AbstractCallable you call serialize() while
another (the prime) serialize calls __sleep() on an instance of this class.
What's the intention of this __temp__ thing?
------------------------------------------------------------------------
[2011-10-03 09:45:19] mike@php.net
Obviously I did, but it's unclear how...
The reproduce case doesn't help much either.
------------------------------------------------------------------------
[2011-10-01 13:58:26] johannes@php.net
mike, seems like you broke this. Please take a look.
------------------------------------------------------------------------
[2011-10-01 12:25:51] mapi at pdepend dot org
Bingo!
With revision 299770 this bug occurs the first time. If I checkout and compile
revision 299769 of trunk, everything works as expected. With revision 299770 I
get those annoying unserialized arrays with NULL values.
------------------------------------------------------------------------
[2011-09-30 16:09:44] johannes@php.net
Can you try reverting SVN revision r299770 and then run your test? - That's mostly a guess,
though.
bug #36424
http://svn.php.net/viewvc/?view=revision&revision=299770
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=55801
--
Edit this bug report at https://bugs.php.net/bug.php?id=55801&edit=1