X-Git-Url: https://git.librecmc.org/?p=oweals%2Fjsonpath.git;a=blobdiff_plain;f=matcher.c;h=ceb756e66573679840f4900dbc2ac7a064afa157;hp=7fb6d0224f748fffbc092a575f5bdad20f86de8e;hb=691f1065ad33b5d53d342e8705a37563d9ebb8b5;hpb=f3830138661374ca10fe6a0b6f2f4b949dea3e5c diff --git a/matcher.c b/matcher.c index 7fb6d02..ceb756e 100644 --- a/matcher.c +++ b/matcher.c @@ -237,7 +237,8 @@ jp_match_next(struct jp_opcode *ptr, struct json_object *root, struct json_object *cur, jp_match_cb_t cb, void *priv) { - struct json_object *next; + int idx; + struct json_object *next = NULL; if (!ptr) { @@ -257,7 +258,13 @@ jp_match_next(struct jp_opcode *ptr, break; case T_NUMBER: - next = json_object_array_get_idx(cur, ptr->num); + idx = ptr->num; + + if (idx < 0) + idx += json_object_array_length(cur); + + if (idx >= 0) + next = json_object_array_get_idx(cur, idx); if (next) return jp_match_next(ptr->sibling, root, next, cb, priv);