mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-09 16:21:45 +00:00
Fix #2345 - json parsing of arrays of objects
This commit is contained in:
1 parent
66e022c454
commit
58886a9693
3 files changed
+30
-10
No files matched your search
+9
-5
@@ -166,11 +166,11 @@ int mg_json_get(struct mg_str json, const char *path, int *toklen) {
|
||||
if (i + 1 + n >= len) return MG_JSON_NOT_FOUND;
|
||||
if (depth < ed) return MG_JSON_NOT_FOUND;
|
||||
if (depth == ed && path[pos - 1] != '.') return MG_JSON_NOT_FOUND;
|
||||
// printf("K %s [%.*s] [%.*s] %d %d %d\n", path, pos, path, n,
|
||||
// &s[i + 1], n, depth, ed);
|
||||
// NOTE(cpq): in the check sequence below is important.
|
||||
// strncmp() must go first: it fails fast if the remaining length of
|
||||
// the path is smaller than `n`.
|
||||
// printf("K %s [%.*s] [%.*s] %d %d %d %d %d\n", path, pos, path, n,
|
||||
// &s[i + 1], n, depth, ed, ci, ei);
|
||||
// NOTE(cpq): in the check sequence below is important.
|
||||
// strncmp() must go first: it fails fast if the remaining length of
|
||||
// the path is smaller than `n`.
|
||||
if (depth == ed && path[pos - 1] == '.' &&
|
||||
strncmp(&s[i + 1], &path[pos], (size_t) n) == 0 &&
|
||||
(path[pos + n] == '\0' || path[pos + n] == '.' ||
|
||||
@@ -202,6 +202,10 @@ int mg_json_get(struct mg_str json, const char *path, int *toklen) {
|
||||
} else if (c == ',') {
|
||||
expecting = (nesting[depth - 1] == '{') ? S_KEY : S_VALUE;
|
||||
} else if (c == ']' || c == '}') {
|
||||
if (depth == ed && c == '}' && path[pos - 1] == '.')
|
||||
return MG_JSON_NOT_FOUND;
|
||||
if (depth == ed && c == ']' && path[pos - 1] == ',')
|
||||
return MG_JSON_NOT_FOUND;
|
||||
MG_EOO('O');
|
||||
if (depth == ed && ei >= 0) ci++;
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user