summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--json-glib/json-parser.c9
-rw-r--r--json-glib/json-parser.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index 12c3ebf..edc13f0 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -878,6 +878,15 @@ json_parser_load (JsonParser *parser,
json_parser_clear (parser);
+ if (!g_utf8_validate (data, -1, NULL))
+ {
+ g_set_error_literal (error, JSON_PARSER_ERROR,
+ JSON_PARSER_ERROR_INVALID_DATA,
+ _("JSON data must be UTF-8 encoded"));
+ g_signal_emit (parser, parser_signals[ERROR], 0, *error);
+ return FALSE;
+ }
+
scanner = json_scanner_create (parser);
json_scanner_input_text (scanner, data, length);
diff --git a/json-glib/json-parser.h b/json-glib/json-parser.h
index fc58b0a..894a80b 100644
--- a/json-glib/json-parser.h
+++ b/json-glib/json-parser.h
@@ -55,6 +55,7 @@ typedef struct _JsonParserClass JsonParserClass;
* @JSON_PARSER_ERROR_MISSING_COLON: expected colon
* @JSON_PARSER_ERROR_INVALID_BAREWORD: invalid bareword
* @JSON_PARSER_ERROR_EMPTY_MEMBER_NAME: empty member name (Since: 0.16)
+ * @JSON_PARSER_ERROR_INVALID_DATA: invalid data (Since: 0.18)
* @JSON_PARSER_ERROR_UNKNOWN: unknown error
*
* Error enumeration for #JsonParser
@@ -68,6 +69,7 @@ typedef enum {
JSON_PARSER_ERROR_MISSING_COLON,
JSON_PARSER_ERROR_INVALID_BAREWORD,
JSON_PARSER_ERROR_EMPTY_MEMBER_NAME,
+ JSON_PARSER_ERROR_INVALID_DATA,
JSON_PARSER_ERROR_UNKNOWN
} JsonParserError;