From f0fb480b13ceb6dee25db19b34007130a3fd1511 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Wed, 22 Jul 2009 21:32:58 +0000 Subject: [PATCH] There is no error code set for json_last_error if an invalid utf8 sequence is encountered. This fixes that. Might be worthwhile to merge to 5.3 despite the new constant. --- ext/json/JSON_parser.h | 1 + ext/json/json.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h index 03be9ce990..d4df5406a9 100644 --- a/ext/json/JSON_parser.h +++ b/ext/json/JSON_parser.h @@ -24,6 +24,7 @@ enum error_codes { PHP_JSON_ERROR_STATE_MISMATCH, PHP_JSON_ERROR_CTRL_CHAR, PHP_JSON_ERROR_SYNTAX, + PHP_JSON_ERROR_UTF8, }; extern JSON_parser new_JSON_parser(int depth); diff --git a/ext/json/json.c b/ext/json/json.c index b8d30e75b3..2ebb76a51c 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -93,6 +93,7 @@ static PHP_MINIT_FUNCTION(json) REGISTER_LONG_CONSTANT("JSON_ERROR_STATE_MISMATCH", PHP_JSON_ERROR_STATE_MISMATCH, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8, CONST_CS | CONST_PERSISTENT); return SUCCESS; } @@ -311,6 +312,7 @@ static void json_escape_string(smart_str *buf, zstr s, int len, zend_uchar type, efree(utf16); } if (len < 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"); } @@ -538,6 +540,7 @@ static PHP_FUNCTION(json_decode) if (utf16) { efree(utf16); } + JSON_G(error_code) = PHP_JSON_ERROR_UTF8; RETURN_NULL(); } } -- 2.50.1