Browse Source

jsonrpc: Forward errors on malformed requests to cli

We were masquerading errors when parsing the request by reporting only
a bogus malformed `id` field in the response, when the real issue was
that we were unable to parse the request in the first place (which
caused the null-id error to be returned).

Fixes #4238
fix-mocks
Christian Decker 4 years ago
committed by Rusty Russell
parent
commit
b2a5cf422f
  1. 5
      cli/lightning-cli.c
  2. 6
      lightningd/jsonrpc.c

5
cli/lightning-cli.c

@ -823,8 +823,9 @@ int main(int argc, char *argv[])
"Missing 'id' in response '%s'", resp); "Missing 'id' in response '%s'", resp);
if (!json_tok_streq(resp, id, idstr)) if (!json_tok_streq(resp, id, idstr))
errx(ERROR_TALKING_TO_LIGHTNINGD, errx(ERROR_TALKING_TO_LIGHTNINGD,
"Incorrect 'id' in response: %.*s", "Incorrect 'id' (%.*s) in response: %.*s",
json_tok_full_len(id), json_tok_full(resp, id)); json_tok_full_len(id), json_tok_full(resp, id),
json_tok_full_len(toks), json_tok_full(resp, toks));
if (!error || json_tok_is_null(resp, error)) { if (!error || json_tok_is_null(resp, error)) {
switch (format) { switch (format) {

6
lightningd/jsonrpc.c

@ -956,8 +956,10 @@ static struct io_plan *read_json(struct io_conn *conn,
if (!json_parse_input(&jcon->input_parser, &jcon->input_toks, if (!json_parse_input(&jcon->input_parser, &jcon->input_toks,
jcon->buffer, jcon->used, jcon->buffer, jcon->used,
&complete)) { &complete)) {
json_command_malformed(jcon, "null", json_command_malformed(
"Invalid token in json input"); jcon, "null",
tal_fmt(tmpctx, "Invalid token in json input: '%s'",
tal_strndup(tmpctx, jcon->buffer, jcon->used)));
return io_halfclose(conn); return io_halfclose(conn);
} }

Loading…
Cancel
Save