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 <eblake@redhat.com>
This commit is contained in:
Eric Blake 2015-06-22 14:18:33 -06:00 committed by Michal Privoznik
parent f2acaebd40
commit 54dbba5bc3
2 changed files with 3 additions and 2 deletions

View File

@ -1596,7 +1596,7 @@ virJSONValueFromString(const char *jsonstring)
int rc; int rc;
size_t len = strlen(jsonstring); size_t len = strlen(jsonstring);
# ifndef WITH_YAJL2 # ifndef WITH_YAJL2
yajl_parser_config cfg = { 1, 1 }; yajl_parser_config cfg = { 0, 1 };
# endif # endif
VIR_DEBUG("string=%s", jsonstring); VIR_DEBUG("string=%s", jsonstring);
@ -1604,7 +1604,7 @@ virJSONValueFromString(const char *jsonstring)
# ifdef WITH_YAJL2 # ifdef WITH_YAJL2
hand = yajl_alloc(&parserCallbacks, NULL, &parser); hand = yajl_alloc(&parserCallbacks, NULL, &parser);
if (hand) { if (hand) {
yajl_config(hand, yajl_allow_comments, 1); yajl_config(hand, yajl_allow_comments, 0);
yajl_config(hand, yajl_dont_validate_strings, 0); yajl_config(hand, yajl_dont_validate_strings, 0);
} }
# else # else

View File

@ -418,6 +418,7 @@ mymain(void)
DO_TEST_PARSE_FAIL("incomplete keyword", "tr"); DO_TEST_PARSE_FAIL("incomplete keyword", "tr");
DO_TEST_PARSE_FAIL("overdone keyword", "[ truest ]"); DO_TEST_PARSE_FAIL("overdone keyword", "[ truest ]");
DO_TEST_PARSE_FAIL("unknown keyword", "huh"); 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("object with numeric keys", "{ 1:1, 2:1, 3:2 }");
DO_TEST_PARSE_FAIL("unterminated object", "{ \"1\":1, \"2\":1, \"3\":2"); DO_TEST_PARSE_FAIL("unterminated object", "{ \"1\":1, \"2\":1, \"3\":2");