Proper handling {} in JSON array + unit test

This commit is contained in:
cpq 2023-06-06 08:38:08 +01:00
parent fe0d2272f6
commit 6085998d57
3 changed files with 6 additions and 0 deletions

View File

@ -2532,6 +2532,7 @@ int mg_json_get(struct mg_str json, const char *path, int *toklen) {
} else if (c == '}') { // Empty object
MG_EOO('}');
expecting = S_COMMA_OR_EOO;
if (depth == ed && ei >= 0) ci++;
} else {
return MG_JSON_INVALID;
}

View File

@ -182,6 +182,7 @@ int mg_json_get(struct mg_str json, const char *path, int *toklen) {
} else if (c == '}') { // Empty object
MG_EOO('}');
expecting = S_COMMA_OR_EOO;
if (depth == ed && ei >= 0) ci++;
} else {
return MG_JSON_INVALID;
}

View File

@ -2792,6 +2792,10 @@ static void test_json(void) {
json = mg_str("{\"a\":1,\"b\":[1,2]}");
ASSERT(mg_json_get(json, "$.a", &n) == 5 && n == 1);
ASSERT(mg_json_get(json, "$.a[0]", &n) < 0 && n == 0);
ASSERT(mg_json_get_long(mg_str("[0, 42]"), "$[1]", 0) == 42);
ASSERT(mg_json_get_long(mg_str("[[], 42]"), "$[1]", 0) == 42);
ASSERT(mg_json_get_long(mg_str("[{}, 42]"), "$[1]", 0) == 42);
}
static void resp_rpc(struct mg_rpc_req *r) {