summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2020-12-31 15:18:14 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2020-12-31 15:18:14 +0000
commit515d1e39f6f418a60d9e4ee98a48608c1b5fcc44 (patch)
tree841908db4bbb926762ce7b6a283c50bf91ad85a0 /json-glib/json-parser.c
parent1bd60e1a07f4c978ed16ddb6d1876b55be87e200 (diff)
parent03ef3863734ec62f29b99205b717a826d6c76b00 (diff)
downloadjson-glib-515d1e39f6f418a60d9e4ee98a48608c1b5fcc44.tar.gz
Merge branch 'handle-utf8-bom' into 'master'
parser: Ignore UTF-8 BOM if necessary Closes #56 See merge request GNOME/json-glib!35
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index 4e08848..4a560d8 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -970,7 +970,7 @@ json_parser_new_immutable (void)
static gboolean
json_parser_load (JsonParser *parser,
- const gchar *data,
+ const gchar *input_data,
gsize length,
GError **error)
{
@@ -979,6 +979,7 @@ json_parser_load (JsonParser *parser,
gboolean done;
gboolean retval = TRUE;
gint i;
+ gchar *data = input_data;
json_parser_clear (parser);
@@ -991,6 +992,19 @@ json_parser_load (JsonParser *parser,
return FALSE;
}
+ if (length >= 3)
+ {
+ /* Check for UTF-8 signature and skip it if necessary */
+ if (((data[0] & 0xFF) == 0xEF) &&
+ ((data[1] & 0xFF) == 0xBB) &&
+ ((data[2] & 0xFF) == 0xBF))
+ {
+ JSON_NOTE (PARSER, "Skipping BOM");
+ data += 3;
+ length -= 3;
+ }
+ }
+
scanner = json_scanner_create (parser);
json_scanner_input_text (scanner, data, length);