From 92aeda524b0b99ab0c861bcba62e5a471ba805e6 Mon Sep 17 00:00:00 2001 From: Tyson Andre Date: Sat, 27 Mar 2021 15:19:08 -0400 Subject: Fix json_encode regression with JSON_PRETTY_PRINT This makes the json encoding behavior the same as it was prior to the memory optimizations added in f9f8c1c79cac1b03279190e0c5513a51881615f9 (for objects with declared properties) This is based on the code for the unoptimized case below the changes. Buggy output prior to this commit: ``` { "prop":"value"} ``` Correct output: ``` { "prop": "value" } ``` Closes GH-6811 --- ext/json/tests/json_encode_pretty_print2.phpt | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 ext/json/tests/json_encode_pretty_print2.phpt (limited to 'ext/json/tests') diff --git a/ext/json/tests/json_encode_pretty_print2.phpt b/ext/json/tests/json_encode_pretty_print2.phpt new file mode 100644 index 0000000000..e872852a38 --- /dev/null +++ b/ext/json/tests/json_encode_pretty_print2.phpt @@ -0,0 +1,55 @@ +--TEST-- +json_encode() with JSON_PRETTY_PRINT on declared properties +--FILE-- +x = $x; + $this->y = $y; + } +} + +class HasNoProperties {} + +echo json_encode(new HasNoProperties()), "\n"; +echo json_encode(new HasNoProperties(), JSON_PRETTY_PRINT), "\n"; + +echo json_encode(new MyClass()), "\n"; +echo json_encode(new MyClass(), JSON_PRETTY_PRINT), "\n"; +$obj = new MyClass(); +$obj->dynamic = new MyClass(null, []); +echo json_encode($obj), "\n"; +echo json_encode($obj, JSON_PRETTY_PRINT), "\n"; +$obj = new MyClass(); +unset($obj->y); +echo json_encode($obj), "\n"; +echo json_encode($obj, JSON_PRETTY_PRINT), "\n"; +unset($obj->x); +echo json_encode($obj), "\n"; +echo json_encode($obj, JSON_PRETTY_PRINT), "\n"; +?> +--EXPECT-- +{} +{} +{"x":123,"y":[]} +{ + "x": 123, + "y": [] +} +{"x":123,"y":[],"dynamic":{"x":null,"y":[]}} +{ + "x": 123, + "y": [], + "dynamic": { + "x": null, + "y": [] + } +} +{"x":123} +{ + "x": 123 +} +{} +{} \ No newline at end of file -- cgit v1.2.1