Bug #78667 [Opn]: Segmentation fault when using clone in jsonSerilization method

[email protected] ("aparcos at gmail dot com") Sun, 13 Oct 2019 07:40:05 +0000
Newsgroups php.standards
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=78667&edit=1

 ID:                 78667
 User updated by:    aparcos at gmail dot com
 Reported by:        aparcos at gmail dot com
 Summary:            Segmentation fault when using clone in
                     jsonSerilization method
 Status:             Open
 Type:               Bug
-Package:            Class/Object related
+Package:            PHP Language Specification
-Operating System:   Debian 10
+Operating System:   Irrelevant
 PHP Version:        Irrelevant
 Block user comment: N
 Private report:     N

 New Comment:

Changed affected OS & Package


Previous Comments:
------------------------------------------------------------------------
[2019-10-12 21:44:49] aparcos at gmail dot com

Description:
------------
A segmentation fault is going to happen when you accidentally uses clone inside the jsonSerialize method that implements JsonSerializable and return the new cloned object. If you uncomment the following test script,  you will see that is going to be called several times until the recursive call get exhausted and finish given the segmentation fault.



Test script:
---------------
<?php


class CloneThis implements JsonSerializable {
  public $date;

  public function jsonSerialize() {
        $clone = clone $this;
//      var_dump($this);

//        if ($this->date instanceof DateTime) {
 //               $clone->date = $this->date->format('Y.m.d');
   //     }
        return $clone;
  }
 
}


$variable = new CloneThis;
$variable->date = new DateTime();

echo json_encode($variable);












Expected result:
----------------
I think should be :
 1. or the current date. 
 2. or An error where many recursive calls are done (maybe)


Actual result:
--------------
////////////////////////////////
...strings removed

object(CloneThis)#52273 (1) {
  ["date"]=>
  string(10) "2019.10.12"
}
object(CloneThis)#52274 (1) {
  ["date"]=>
  string(10) "2019.10.12"
}
object(CloneThis)#52275 (1) {
  ["date"]=>
  string(10) "2019.10.12"
}
object(CloneThis)#52276 (1) {
  ["date"]=>
  string(10) "2019.10.12"
}
object(CloneThis)#52277 (1) {
  ["date"]=>
Segment violation



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=78667&edit=1