php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81524 json_encode() on JsonSerializable populates the properties HashTable
Submitted: 2021-10-13 22:54 UTC Modified: 2023-08-26 14:36 UTC
From: tstarling@php.net Assigned: bukka (profile)
Status: Closed Package: JSON related
PHP Version: 8.1Git-2021-10-13 (Git) OS:
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: tstarling@php.net
New email:
PHP Version: OS:

 

 [2021-10-13 22:54 UTC] 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


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2023-08-26 14:36 UTC] bukka@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: bukka
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 20:01:29 2024 UTC