mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-09 00:54:22 +01:00
Required jsonrpc inside the method request.
As the json rpc specification tell, the "jsonrpc": "2.0" MUST be required. Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
This commit is contained in:
committed by
Rusty Russell
parent
8f782b06f7
commit
dca9bb8638
@@ -700,7 +700,7 @@ static void replace_command(struct rpc_command_hook_payload *p,
|
||||
const char *buffer,
|
||||
const jsmntok_t *replacetok)
|
||||
{
|
||||
const jsmntok_t *method = NULL, *params = NULL;
|
||||
const jsmntok_t *method = NULL, *params = NULL, *jsonrpc = NULL;
|
||||
const char *bad;
|
||||
|
||||
/* Must contain "method", "params" and "id" */
|
||||
@@ -732,6 +732,12 @@ static void replace_command(struct rpc_command_hook_payload *p,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
jsonrpc = json_get_member(buffer, replacetok, "jsonrpc");
|
||||
if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(buffer, jsonrpc, "2.0")) {
|
||||
bad = "jsonrpc: \"2.0\" must be specified in the request";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
was_pending(command_exec(p->cmd->jcon, p->cmd, buffer, replacetok,
|
||||
params));
|
||||
return;
|
||||
@@ -864,7 +870,7 @@ REGISTER_PLUGIN_HOOK(rpc_command,
|
||||
static struct command_result *
|
||||
parse_request(struct json_connection *jcon, const jsmntok_t tok[])
|
||||
{
|
||||
const jsmntok_t *method, *id, *params;
|
||||
const jsmntok_t *method, *id, *params, *jsonrpc;
|
||||
struct command *c;
|
||||
struct rpc_command_hook_payload *rpc_hook;
|
||||
bool completed;
|
||||
@@ -878,17 +884,24 @@ parse_request(struct json_connection *jcon, const jsmntok_t tok[])
|
||||
method = json_get_member(jcon->buffer, tok, "method");
|
||||
params = json_get_member(jcon->buffer, tok, "params");
|
||||
id = json_get_member(jcon->buffer, tok, "id");
|
||||
jsonrpc = json_get_member(jcon->buffer, tok, "jsonrpc");
|
||||
|
||||
if (!id) {
|
||||
json_command_malformed(jcon, "null", "No id");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (id->type != JSMN_STRING && id->type != JSMN_PRIMITIVE) {
|
||||
json_command_malformed(jcon, "null",
|
||||
"Expected string/primitive for id");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(jcon->buffer, jsonrpc, "2.0")) {
|
||||
json_command_malformed(jcon, "null", "jsonrpc: \"2.0\" must be specified in the request");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Allocate the command off of the `jsonrpc` object and not
|
||||
* the connection since the command may outlive `conn`. */
|
||||
c = tal(jcon->ld->jsonrpc, struct command);
|
||||
|
||||
Reference in New Issue
Block a user