diff options
author | Adam Harvey <adam@pwd.net.au> | 2012-04-02 09:46:18 +0800 |
---|---|---|
committer | Adam Harvey <adam@pwd.net.au> | 2012-04-11 08:29:39 +0800 |
commit | cb2a1c71c96d7c9b2ee03d77beae0c8e0d385f1b (patch) | |
tree | 71f9efc6d0496d756594025851ffe09966682268 /ext/json/json.c | |
parent | 112a476b683a634390b23fe7509d5b73632d0829 (diff) | |
download | php-git-cb2a1c71c96d7c9b2ee03d77beae0c8e0d385f1b.tar.gz |
Fix bug #61537 (json_encode() incorrectly truncates/discards information) and
remove a test case that's now mooted by this fix.
Diffstat (limited to 'ext/json/json.c')
-rw-r--r-- | ext/json/json.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/json/json.c b/ext/json/json.c index fc1fcb7f1f..853611e7aa 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -96,6 +96,7 @@ static PHP_MINIT_FUNCTION(json) REGISTER_LONG_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("JSON_PARTIAL_OUTPUT_ON_ERROR", PHP_JSON_PARTIAL_OUTPUT_ON_ERROR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT); @@ -389,9 +390,7 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR } if (ulen < 0) { JSON_G(error_code) = PHP_JSON_ERROR_UTF8; - if (!PG(display_errors)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid UTF-8 sequence in argument"); - } + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid UTF-8 sequence in argument"); smart_str_appendl(buf, "null", 4); } else { smart_str_appendl(buf, "\"\"", 2); @@ -689,7 +688,11 @@ static PHP_FUNCTION(json_encode) php_json_encode(&buf, parameter, options TSRMLS_CC); - ZVAL_STRINGL(return_value, buf.c, buf.len, 1); + if (JSON_G(error_code) != PHP_JSON_ERROR_NONE && options ^ PHP_JSON_PARTIAL_OUTPUT_ON_ERROR) { + ZVAL_FALSE(return_value); + } else { + ZVAL_STRINGL(return_value, buf.c, buf.len, 1); + } smart_str_free(&buf); } |