diff options
author | Jan-Michael Brummer <jan.brummer@tabos.org> | 2020-12-31 15:47:00 +0100 |
---|---|---|
committer | Jan-Michael Brummer <jan.brummer@tabos.org> | 2020-12-31 15:47:00 +0100 |
commit | 03ef3863734ec62f29b99205b717a826d6c76b00 (patch) | |
tree | 841908db4bbb926762ce7b6a283c50bf91ad85a0 /json-glib/json-parser.c | |
parent | 1bd60e1a07f4c978ed16ddb6d1876b55be87e200 (diff) | |
download | json-glib-handle-utf8-bom.tar.gz |
parser: Ignore UTF-8 BOM if necessaryhandle-utf8-bom
According to JSON spec BOM shouldn't be part of the JSON data, but
also recommends to tolerate files with a BOM marker. As this is common
in several Windows JSON generators, handle it graceful in json-glib and
skip it for UTF-8 BOM.
Fixes: https://gitlab.gnome.org/GNOME/json-glib/-/issues/56
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r-- | json-glib/json-parser.c | 16 |
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); |