From 7e069daa89f05c1fa4127b2cedfd5586dbfc810e Mon Sep 17 00:00:00 2001 From: Jakub Zelenka Date: Sun, 20 Mar 2016 15:53:57 +0000 Subject: [PATCH] Fix bug #71835 (json_encode sometimes incorrectly detects recursion with JsonSerializable) --- NEWS | 4 ++++ Zend/zend_builtin_functions.c | 2 +- ext/json/tests/bug71835.phpt | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 ext/json/tests/bug71835.phpt diff --git a/NEWS b/NEWS index 0cccc6abe7b..63b405f42a1 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,10 @@ PHP NEWS . Fixed bug #69659 (ArrayAccess, isset() and the offsetExists method). (Nikita) +- JSON: + . Fixed bug #71835 (json_encode sometimes incorrectly detects recursion + with JsonSerializable). (Jakub Zelenka) + - ODBC: . Fixed bug #63171 (Script hangs after max_execution_time). (Remi) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 231424f1de0..a576455fa3b 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1183,7 +1183,7 @@ ZEND_FUNCTION(get_object_vars) zobj = Z_OBJ_P(obj); - if (!zobj->ce->default_properties_count && properties == zobj->properties) { + if (!zobj->ce->default_properties_count && properties == zobj->properties && !ZEND_HASH_GET_APPLY_COUNT(properties)) { /* fast copy */ if (EXPECTED(zobj->handlers == &std_object_handlers)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { diff --git a/ext/json/tests/bug71835.phpt b/ext/json/tests/bug71835.phpt new file mode 100644 index 00000000000..bbca19829ba --- /dev/null +++ b/ext/json/tests/bug71835.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #71835 (json_encode sometimes incorrectly detects recursion with JsonSerializable) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(6) "[[[]]]"