From 692590b30a29acad9e8d29ab1b238f06c5732a23 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 25 Feb 2026 17:59:08 +0100 Subject: [PATCH] json: a container start also ends a bare string This stops the parser from seeing foo{bar as a single string. This also makes a valid test work, add another small test. --- spa/include/spa/utils/json-core.h | 2 +- test/test-spa-json.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spa/include/spa/utils/json-core.h b/spa/include/spa/utils/json-core.h index 5616bffe1..aa36e2d51 100644 --- a/spa/include/spa/utils/json-core.h +++ b/spa/include/spa/utils/json-core.h @@ -232,7 +232,7 @@ SPA_API_JSON int spa_json_next(struct spa_json * iter, const char **value) switch (cur) { case '\0': case '\t': case ' ': case '\r': case '\n': - case '"': case '#': + case '"': case '#': case '{': case '[': case ':': case ',': case '=': case ']': case '}': iter->state = __STRUCT | flag; if (iter->depth > 0) diff --git a/test/test-spa-json.c b/test/test-spa-json.c index 0c3c46f59..75fde8d38 100644 --- a/test/test-spa-json.c +++ b/test/test-spa-json.c @@ -350,6 +350,12 @@ PWTEST(json_parse) expect_string(&it[0], "hello"); expect_end(&it[0]); + json = "xy{}"; + spa_json_init(&it[0], json, strlen(json)); + expect_string_or_bare(&it[0], "xy"); + expect_object(&it[0], &it[1]); + expect_end(&it[0]); + /* top-level context */ json = "x y x y"; spa_json_init(&it[0], json, strlen(json)); @@ -944,6 +950,7 @@ PWTEST(json_data) "n_array_missing_value.json", "n_array_number_and_comma.json", "n_array_number_and_several_commas.json", + "n_array_inner_array_no_comma.json", "n_object_comma_instead_of_colon.json", "n_object_double_colon.json", "n_object_missing_semicolon.json",