diff --git a/lib/webfuse/impl/json/parser.c b/lib/webfuse/impl/json/parser.c index 6003239..e451fd2 100644 --- a/lib/webfuse/impl/json/parser.c +++ b/lib/webfuse/impl/json/parser.c @@ -210,7 +210,7 @@ wf_impl_json_parse_array( } } while ((result) && (',' == c)); - if ((result) && (']' != c)) + if (']' != c) { result = false; } @@ -272,9 +272,9 @@ wf_impl_json_parse_object( wf_impl_json_reader_skip_whitespace(reader); c = wf_impl_json_reader_get_char(reader); } - } while ((reader) && (',' == c)); + } while ((result) && (',' == c)); - if ((reader) && ('}' != c)) + if ('}' != c) { result = false; } diff --git a/test/webfuse/json/test_parser.cc b/test/webfuse/json/test_parser.cc index 06ab742..e51be86 100644 --- a/test/webfuse/json/test_parser.cc +++ b/test/webfuse/json/test_parser.cc @@ -72,6 +72,16 @@ TEST(json_parser, fail_unterminated_array) ASSERT_FALSE(try_parse("[1")); } +TEST(json_parser, fail_missing_array_separator) +{ + ASSERT_FALSE(try_parse("[1 2]")); +} + +TEST(json_parser, fail_missing_array_value) +{ + ASSERT_FALSE(try_parse("[1,]")); +} + TEST(json_parser, empty_object) { ASSERT_TRUE(try_parse("{}")); @@ -101,3 +111,13 @@ TEST(json_parser, fail_missing_object_value) { ASSERT_FALSE(try_parse("{\"a\":}")); } + +TEST(json_parser, fail_missing_object_separator) +{ + ASSERT_FALSE(try_parse("{\"a\":1 \"b\":2}")); +} + +TEST(json_parser, fail_missing_object_item) +{ + ASSERT_FALSE(try_parse("{\"a\":1,}")); +}