php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #63163 Unserialisation incorrect in presented scenario
Submitted: 2012-09-25 19:49 UTC Modified: 2017-01-01 11:47 UTC
Votes:4
Avg. Score:4.5 ± 0.5
Reproduced:4 of 4 (100.0%)
Same Version:2 (50.0%)
Same OS:3 (75.0%)
From: james at gadgets4vista dot co dot uk Assigned:
Status: Duplicate Package: Scripting Engine problem
PHP Version: 5.4.7 OS: OS X 10.8.2
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: james at gadgets4vista dot co dot uk
New email:
PHP Version: OS:

 

 [2012-09-25 19:49 UTC] james at gadgets4vista dot co dot uk
Description:
------------
So far as I can tell this problem is trigged by the serialisation/deserialisation 
going on in the inheritance hierarchy (ParentA and ParentB) in combination with 
the re-use (triggering obj references in the serialisation) of ParentB's children 
in Wrapper.

At a guess this is a difference in the table construction between serialize and 
unserialize (thus ending up referencing the incorrect thing), but I haven't yet 
taken a look at their implementation so that's a total stab in the dark.

Test script:
---------------
http://pastie.org/private/vbjpi8ytmqqxi2pkiizatw

Expected result:
----------------
object(Wrapper)#6 (2) {
  ["parent"]=>
  object(ParentB)#7 (2) {
    ["collection"]=>
    array(3) {
      [0]=>
      object(Child)#8 (1) {
        ["property"]=>
        string(3) "foo"
      }
      [1]=>
      object(Child)#9 (1) {
        ["property"]=>
        string(3) "foo"
      }
      [2]=>
      object(Child)#10 (1) {
        ["property"]=>
        string(3) "foo"
      }
    }
    ["rofl"]=>
    string(3) "foo"
  }
  ["children"]=>
  array(3) {
    [0]=>
    object(Child)#8 (1) {
      ["property"]=>
      string(3) "foo"
    }
    [1]=>
    object(Child)#9 (1) {
      ["property"]=>
      string(3) "foo"
    }
    [2]=>
    object(Child)#10 (1) {
      ["property"]=>
      string(3) "foo"
    }
  }
}

Actual result:
--------------
object(Wrapper)#6 (2) {
  ["parent"]=>
  object(ParentB)#7 (2) {
    ["collection"]=>
    array(3) {
      [0]=>
      object(Child)#8 (1) {
        ["property"]=>
        string(3) "foo"
      }
      [1]=>
      object(Child)#9 (1) {
        ["property"]=>
        string(3) "foo"
      }
      [2]=>
      object(Child)#10 (1) {
        ["property"]=>
        string(3) "foo"
      }
    }
    ["rofl"]=>
    string(3) "foo"
  }
  ["children"]=>
  array(3) {
    [0]=>
    object(Child)#9 (1) { <-- Where'd #8 go?
      ["property"]=>
      string(3) "foo"
    }
    [1]=>
    object(Child)#10 (1) {
      ["property"]=>
      string(3) "foo"
    }
    [2]=>
    string(20) "1Y"  <-- Unexpected
  }
}

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-09-09 06:59 UTC] turneliusz at gmail dot com
Fixed in PHP7 and HVVM http://3v4l.org/WPdtA
 [2017-01-01 11:47 UTC] nikic@php.net
-Status: Open +Status: Duplicate
 [2017-01-01 11:47 UTC] nikic@php.net
Closing as duplicate of newer bug #66085, which has more discussion about the root cause.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Nov 25 00:01:33 2024 UTC