From: Eric Blake Date: Mon, 22 Jun 2015 20:18:33 +0000 (-0600) Subject: json: reject javascript comments X-Git-Tag: v1.2.17-rc1~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54dbba5bc3e5bc177b0d806849e44d81192d1168;p=thirdparty%2Flibvirt.git json: reject javascript comments We have been allowing javascript style comments in JSON ever since commit 9428f2c (v0.7.5), but qemu doesn't send them, and they are not strict JSON. Reject them for now; if we can later prove that it is worthwhile, we can reinstate it at that point (or even make it conditional, by adding a bool parameter to the libvirt entry point). * src/util/virjson.c (virJSONValueFromString): Don't enable comment parsing. * tests/jsontest.c (mymain): Test it. Signed-off-by: Eric Blake --- diff --git a/src/util/virjson.c b/src/util/virjson.c index 4257b30e69..8d12fadb3f 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -1596,7 +1596,7 @@ virJSONValueFromString(const char *jsonstring) int rc; size_t len = strlen(jsonstring); # ifndef WITH_YAJL2 - yajl_parser_config cfg = { 1, 1 }; + yajl_parser_config cfg = { 0, 1 }; # endif VIR_DEBUG("string=%s", jsonstring); @@ -1604,7 +1604,7 @@ virJSONValueFromString(const char *jsonstring) # ifdef WITH_YAJL2 hand = yajl_alloc(&parserCallbacks, NULL, &parser); if (hand) { - yajl_config(hand, yajl_allow_comments, 1); + yajl_config(hand, yajl_allow_comments, 0); yajl_config(hand, yajl_dont_validate_strings, 0); } # else diff --git a/tests/jsontest.c b/tests/jsontest.c index 8ac0970833..f6c2d84095 100644 --- a/tests/jsontest.c +++ b/tests/jsontest.c @@ -418,6 +418,7 @@ mymain(void) DO_TEST_PARSE_FAIL("incomplete keyword", "tr"); DO_TEST_PARSE_FAIL("overdone keyword", "[ truest ]"); DO_TEST_PARSE_FAIL("unknown keyword", "huh"); + DO_TEST_PARSE_FAIL("comments", "[ /* nope */\n1 // not this either\n]"); DO_TEST_PARSE_FAIL("object with numeric keys", "{ 1:1, 2:1, 3:2 }"); DO_TEST_PARSE_FAIL("unterminated object", "{ \"1\":1, \"2\":1, \"3\":2");