plugins/pay: fix leak on failed new payments.

Start with attaching the payment to cmd (in case of failure), then steal
onto the plugin itself.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2020-10-20 14:31:30 +10:30
parent 639eddf840
commit 92f2461b5d
2 changed files with 7 additions and 3 deletions

View File

@@ -1960,8 +1960,6 @@ static struct command_result *json_paymod(struct command *cmd,
bool *use_shadow;
#endif
p = payment_new(NULL, cmd, NULL /* No parent */, paymod_mods);
/* If any of the modifiers need to add params to the JSON-RPC call we
* would add them to the `param()` call below, and have them be
* initialized directly that way. */
@@ -1982,6 +1980,8 @@ static struct command_result *json_paymod(struct command *cmd,
NULL))
return command_param_failed();
p = payment_new(cmd, cmd, NULL /* No parent */, paymod_mods);
b11 = bolt11_decode(cmd, b11str, plugin_feature_set(cmd->plugin),
NULL, chainparams, &fail);
if (!b11)
@@ -2057,6 +2057,8 @@ static struct command_result *json_paymod(struct command *cmd,
p->label = tal_steal(p, label);
payment_start(p);
list_add_tail(&payments, &p->list);
/* We're keeping this around now */
tal_steal(cmd->plugin, p);
return command_still_pending(cmd);
}