]> granicus.if.org Git - php/commitdiff
Introduce internal php_json_encode_ex to allow extensions setting depth
authorJakub Zelenka <bukka@php.net>
Sun, 16 Jul 2017 14:47:23 +0000 (15:47 +0100)
committerJakub Zelenka <bukka@php.net>
Sun, 16 Jul 2017 14:47:23 +0000 (15:47 +0100)
ext/json/json.c
ext/json/php_json.h

index e645f7c52bd8f3ba9a0abea430162942a773d56a..f9962756f549324e8882b45cadf68759dfb8d202 100644 (file)
@@ -188,14 +188,13 @@ static PHP_MINFO_FUNCTION(json)
 }
 /* }}} */
 
-PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options) /* {{{ */
+PHP_JSON_API int php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth) /* {{{ */
 {
        php_json_encoder encoder;
        int return_code;
 
        php_json_encode_init(&encoder);
-       encoder.max_depth = JSON_G(encode_max_depth);
-       encoder.error_code = PHP_JSON_ERROR_NONE;
+       encoder.max_depth = depth;
 
        return_code = php_json_encode_zval(buf, val, options, &encoder);
        JSON_G(error_code) = encoder.error_code;
@@ -204,6 +203,12 @@ PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options) /* {{{
 }
 /* }}} */
 
+PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options) /* {{{ */
+{
+       return php_json_encode_ex(buf, val, options, JSON_G(encode_max_depth));
+}
+/* }}} */
+
 PHP_JSON_API int php_json_decode_ex(zval *return_value, char *str, size_t str_len, zend_long options, zend_long depth) /* {{{ */
 {
        php_json_parser parser;
@@ -239,7 +244,6 @@ static PHP_FUNCTION(json_encode)
 
        php_json_encode_init(&encoder);
        encoder.max_depth = (int)depth;
-       encoder.error_code = PHP_JSON_ERROR_NONE;
        php_json_encode_zval(&buf, parameter, (int)options, &encoder);
        JSON_G(error_code) = encoder.error_code;
 
index e772d8d0c21113ea67925f8bbc16f4b319e35686..0a21dd24de37734870e481a99e1e467a45b4106b 100644 (file)
@@ -97,6 +97,7 @@ PHP_JSON_API ZEND_EXTERN_MODULE_GLOBALS(json)
 ZEND_TSRMLS_CACHE_EXTERN()
 #endif
 
+PHP_JSON_API int php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth);
 PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options);
 PHP_JSON_API int php_json_decode_ex(zval *return_value, char *str, size_t str_len, zend_long options, zend_long depth);
 
@@ -105,7 +106,6 @@ static inline int php_json_decode(zval *return_value, char *str, int str_len, ze
        return php_json_decode_ex(return_value, str, str_len, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0, depth);
 }
 
-
 #endif  /* PHP_JSON_H */
 
 /*