summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
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);