diff --git a/lightningd/plugin.c b/lightningd/plugin.c index de5737bea..254c819ea 100644 --- a/lightningd/plugin.c +++ b/lightningd/plugin.c @@ -393,24 +393,22 @@ static bool plugin_opt_add(struct plugin *plugin, const char *buffer, static bool plugin_opts_add(const struct plugin_request *req) { const char *buffer = req->plugin->buffer; - const jsmntok_t *cur, *options; - - /* This is the parent for all elements in the "options" array */ - int optpos; - options = + const jsmntok_t *options = json_get_member(req->plugin->buffer, req->resulttok, "options"); - if (!options) - return false; - optpos = options - req->toks; + if (!options) { + plugin_kill(req->plugin, + "\"result.options\" was not found in the manifest"); + return false; + } if (options->type != JSMN_ARRAY) { plugin_kill(req->plugin, "\"result.options\" is not an array"); return false; } - for (cur = options + 1; cur->parent == optpos; cur = json_next(cur)) - if (!plugin_opt_add(req->plugin, buffer, cur)) + for (size_t i = 0; i < options->size; i++) + if (!plugin_opt_add(req->plugin, buffer, json_get_arr(options, i))) return false; return true; @@ -564,25 +562,21 @@ static bool plugin_rpcmethod_add(struct plugin *plugin, const char *buffer, static bool plugin_rpcmethods_add(const struct plugin_request *req) { const char *buffer = req->plugin->buffer; - const jsmntok_t *cur, *methods; - - /* This is the parent for all elements in the "options" array */ - int methpos; - - methods = + const jsmntok_t *methods = json_get_member(req->plugin->buffer, req->resulttok, "rpcmethods"); + if (!methods) return false; - methpos = methods - req->toks; - if (methods->type != JSMN_ARRAY) { - plugin_kill(req->plugin, "\"result.rpcmethods\" is not an array"); + plugin_kill(req->plugin, + "\"result.rpcmethods\" is not an array"); return false; } - for (cur = methods + 1; cur->parent == methpos; cur = json_next(cur)) - if (!plugin_rpcmethod_add(req->plugin, buffer, cur)) + for (size_t i = 0; i < methods->size; i++) + if (!plugin_rpcmethod_add(req->plugin, buffer, + json_get_arr(methods, i))) return false; return true; }