From:             vovan-ve at yandex dot ru
Operating system: linux
PHP version:      5.4.11
Package:          Class/Object related
Bug Type:         Bug
Bug description:clone object with circular reference cause segfault

Description:
------------
There are two objects of the same class. Both objects has a property. There
are
circular object reference: $a->prop === $b && $b->prop === $a. The class
has
a __clone() handler which clones object in that property.

So, clonning such object cause segfault.

Yes, described architecture is ugly, but this is just for test.

Test code:

----
    class A {
        public $prop;

        public function __clone() {
            $this->prop = clone $this->prop;
        }
    }

    // create two objects
    $a = new A();
    $b = new A();

    // create circular reference
    $b->prop = $a;
    $a->prop = $b;

    // see short dump with *RECURSION* marker
    print_r($a);

    // now make a problem
    $c = clone $a;

    // never will reach here
    print_r($c);
----

5.5.0.a2, 5.4.11, 5.3.20 and 5.2.17 crashes with segfault. It is infinite
recursion. Also Fatal Error can be emited about memory allocation when
small
memory_limit is set (1M for example).

Unlimited recursion for a simple function cause a fatal error, so the bug
always should cause the same fatal error.

Test script:
---------------
class A {
    public $prop;

    public function __clone() {
        $this->prop = clone $this->prop;
    }
}

$a = new A();
$b = new A();

$b->prop = $a;
$a->prop = $b;

print_r($a);

$c = clone $a;
print_r($c);

Expected result:
----------------
A Object
(
    [prop] => A Object
        (
            [prop] => A Object
 *RECURSION*
        )

)

Fatal error: Allowed memory size of ... bytes exhausted (tried to allocate
... bytes)

Actual result:
--------------
A Object
(
    [prop] => A Object
        (
            [prop] => A Object
 *RECURSION*
        )

)
Segmentation fault (core dumped)

-- 
Edit bug report at https://bugs.php.net/bug.php?id=64195&edit=1
-- 
Try a snapshot (PHP 5.4):   
https://bugs.php.net/fix.php?id=64195&r=trysnapshot54
Try a snapshot (PHP 5.3):   
https://bugs.php.net/fix.php?id=64195&r=trysnapshot53
Try a snapshot (trunk):     
https://bugs.php.net/fix.php?id=64195&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=64195&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=64195&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=64195&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=64195&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=64195&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=64195&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=64195&r=notwrong
Not enough info:            
https://bugs.php.net/fix.php?id=64195&r=notenoughinfo
Submitted twice:            
https://bugs.php.net/fix.php?id=64195&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=64195&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=64195&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=64195&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=64195&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=64195&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=64195&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=64195&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=64195&r=mysqlcfg

Reply via email to