Bug #81524 [Opn->Csd]: json_encode() on JsonSerializable populates the properties HashTable
| From: | bukka@php.net | 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