json: Correctly handle bad strings with missing closing quotes

Also add a test for this case.

Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
This commit is contained in:
Arun Raghavan 2016-06-01 17:18:33 +05:30
parent c692ec3afd
commit 708b4aac91
2 changed files with 14 additions and 1 deletions

View file

@ -122,7 +122,7 @@ static const char* parse_string(const char *str, pa_json_object *obj) {
str++; /* Consume leading '"' */ str++; /* Consume leading '"' */
while (*str != '"') { while (*str && *str != '"') {
if (*str != '\\') { if (*str != '\\') {
/* We only accept ASCII printable characters. */ /* We only accept ASCII printable characters. */
if (*str < 0x20 || *str > 0x7E) { if (*str < 0x20 || *str > 0x7E) {

View file

@ -216,6 +216,18 @@ START_TEST(array_test) {
} }
END_TEST END_TEST
START_TEST(bad_test) {
unsigned int i;
const char *bad_parse[] = {
"\"" /* Quote not closed */,
};
for (i = 0; i < PA_ELEMENTSOF(bad_parse); i++) {
fail_unless(pa_json_parse(bad_parse[i]) == NULL);
}
}
END_TEST
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
int failed = 0; int failed = 0;
Suite *s; Suite *s;
@ -231,6 +243,7 @@ int main(int argc, char *argv[]) {
tcase_add_test(tc, bool_test); tcase_add_test(tc, bool_test);
tcase_add_test(tc, object_test); tcase_add_test(tc, object_test);
tcase_add_test(tc, array_test); tcase_add_test(tc, array_test);
tcase_add_test(tc, bad_test);
suite_add_tcase(s, tc); suite_add_tcase(s, tc);
sr = srunner_create(s); sr = srunner_create(s);