Bug #81524 [Opn->Csd]: json_encode() on JsonSerializable populates the properties HashTable

From: Date: Sat, 26 Aug 2023 14:36:43 +0000
Subject: Bug #81524 [Opn->Csd]: json_encode() on JsonSerializable populates the properties HashTable
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-245254@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81524&edit=1 ID: 81524 Updated by: bukka@php.net Reported by: tstarling@php.net Summary: json_encode() on JsonSerializable populates the properties HashTable -Status: Open +Status: Closed Type: Bug Package: JSON related PHP Version: 8.1Git-2021-10-13 (Git) -Assigned To: +Assigned To: bukka Block user comment: N Private report: N New Comment: This was addressed by https://github.com/php/php-src/commit/53aa53f42f9a27aabd66ea632b867b34c6f7a5ae Previous Comments: ------------------------------------------------------------------------ [2021-10-13 22:54:46] tstarling@php.net Description: ------------ I noticed that if you do json_encode() on a JsonSerializable object, it always populates the properties hashtable, because php_json_encode_serializable_object() needs a hashtable to have somewhere to set the recursion flag. You might think it could just set the recursion flag on the object, but a few test cases (and probably users) do var_dump($this) in jsonSerialize(), which breaks if you protect the object prior to calling jsonSerialize(). It's possible to solve this by adding a second recursion flag to gc_flags, but that's a bit of a joke solution since I wouldn't expect a PR which consumes a bit in gc_flags to be accepted. But here it is if you're curious: https://github.com/tstarling/php-src/commit/1e975dfa731ceba4533aea0efdbd803d226963c9 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81524&edit=1

« previous php.bugs (#245254) next »