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/tests/reader.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/tests/reader.c')
-rw-r--r-- | json-glib/tests/reader.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/json-glib/tests/reader.c b/json-glib/tests/reader.c index d0a046b..67a81c3 100644 --- a/json-glib/tests/reader.c +++ b/json-glib/tests/reader.c @@ -212,6 +212,32 @@ test_reader_null_value (void) g_object_unref (parser); } +/* test_reader_skip_bom: Ensure that a BOM Unicode character is skipped when parsing */ +static void +test_reader_skip_bom (void) +{ + JsonParser *parser = json_parser_new (); + JsonReader *reader = json_reader_new (NULL); + GError *error = NULL; + char *path; + + path = g_test_build_filename (G_TEST_DIST, "skip-bom.json", NULL); + + json_parser_load_from_mapped_file (parser, path, &error); + g_assert_no_error (error); + + json_reader_set_root (reader, json_parser_get_root (parser)); + + json_reader_read_member (reader, "appName"); + g_assert_true (json_reader_is_value (reader)); + g_assert_no_error (json_reader_get_error (reader)); + g_assert_cmpstr (json_reader_get_string_value (reader), ==, "String starts with BOM"); + + g_free (path); + g_object_unref (reader); + g_object_unref (parser); +} + int main (int argc, char *argv[]) @@ -223,6 +249,7 @@ main (int argc, g_test_add_func ("/reader/base-object", test_base_object); g_test_add_func ("/reader/level", test_reader_level); g_test_add_func ("/reader/null-value", test_reader_null_value); + g_test_add_func ("/reader/bom", test_reader_skip_bom); return g_test_run (); } |