From 9e5f687957d532912d062f11dc4f5b2a368e5c4b Mon Sep 17 00:00:00 2001 From: Jakub Zelenka Date: Fri, 12 Dec 2014 19:52:45 +0000 Subject: [PATCH] Fix json object decoding --- ext/json/json_parser.y | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ext/json/json_parser.y b/ext/json/json_parser.y index 6b40c259f30..dbacc3d4835 100644 --- a/ext/json/json_parser.y +++ b/ext/json/json_parser.y @@ -176,7 +176,11 @@ php_json_error_code php_json_parser_error_code(php_json_parser *parser) void php_json_parser_object_init(php_json_parser *parser, zval *object) { TSRMLS_FETCH_FROM_CTX(parser->zts_ctx); - object_init(object); + if (parser->scanner.options & PHP_JSON_OBJECT_AS_ARRAY) { + array_init(object); + } else { + object_init(object); + } } void php_json_parser_object_update(php_json_parser *parser, zval *object, zval *zkey, zval *zvalue) @@ -190,18 +194,17 @@ void php_json_parser_object_update(php_json_parser *parser, zval *object, zval * } else { if (key_len == 0) { key = "_empty_"; - key_len = sizeof("_empty_"); + key_len = sizeof("_empty_") - 1; } add_property_zval_ex(object, key, key_len, zvalue TSRMLS_CC); - /* + if (Z_REFCOUNTED_P(zvalue)) { Z_DELREF_P(zvalue); } - */ } + zval_dtor(zkey); } - void php_json_parser_array_init(zval *array) { array_init(array);