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
This commit is contained in:
Christian Decker 2020-12-04 13:30:10 +01:00 committed by Rusty Russell
parent 71fafd23fd
commit b2a5cf422f
2 changed files with 7 additions and 4 deletions

View File

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

View File

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