Browse Source

Fix bug #71835 (json_encode sometimes incorrectly detects recursion with JsonSerializable)

pull/1832/head
Jakub Zelenka 10 years ago
parent
commit
7e069daa89
  1. 4
      NEWS
  2. 2
      Zend/zend_builtin_functions.c
  3. 17
      ext/json/tests/bug71835.phpt

4
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)

2
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))) {

17
ext/json/tests/bug71835.phpt

@ -0,0 +1,17 @@
--TEST--
Bug #71835 (json_encode sometimes incorrectly detects recursion with JsonSerializable)
--SKIPIF--
<?php if (!extension_loaded("json")) print "skip"; ?>
--FILE--
<?php
class SomeClass implements JsonSerializable {
public function jsonSerialize() {
return [get_object_vars($this)];
}
}
$class = new SomeClass;
$arr = [$class];
var_dump(json_encode($arr));
?>
--EXPECT--
string(6) "[[[]]]"
Loading…
Cancel
Save