From de2ffd898522b2c30a690a75c5e2b368895e8c0e Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 4 Nov 2016 11:17:04 +1030 Subject: [PATCH] accept_pkt_open_commit_sig: don't allocate sig. Caller can allocate and free; this gets the context correct (that commit). Signed-off-by: Rusty Russell --- daemon/packets.c | 9 +++------ daemon/packets.h | 2 +- state.c | 7 ++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/daemon/packets.c b/daemon/packets.c index 046595e22..bc6ee73b0 100644 --- a/daemon/packets.c +++ b/daemon/packets.c @@ -367,17 +367,14 @@ Pkt *accept_pkt_anchor(struct peer *peer, const Pkt *pkt) } Pkt *accept_pkt_open_commit_sig(struct peer *peer, const Pkt *pkt, - struct bitcoin_signature **sig) + struct bitcoin_signature *sig) { const OpenCommitSig *s = pkt->open_commit_sig; - struct signature signature; - if (!proto_to_signature(peer->dstate->secpctx, s->sig, &signature)) + if (!proto_to_signature(peer->dstate->secpctx, s->sig, &sig->sig)) return pkt_err(peer, "Malformed signature"); - *sig = tal(peer, struct bitcoin_signature); - (*sig)->stype = SIGHASH_ALL; - (*sig)->sig = signature; + sig->stype = SIGHASH_ALL; return NULL; } diff --git a/daemon/packets.h b/daemon/packets.h index 111fe1c7a..9e34c017c 100644 --- a/daemon/packets.h +++ b/daemon/packets.h @@ -38,7 +38,7 @@ Pkt *accept_pkt_open(struct peer *peer, const Pkt *pkt, Pkt *accept_pkt_anchor(struct peer *peer, const Pkt *pkt); Pkt *accept_pkt_open_commit_sig(struct peer *peer, const Pkt *pkt, - struct bitcoin_signature **sig); + struct bitcoin_signature *sig); Pkt *accept_pkt_open_complete(struct peer *peer, const Pkt *pkt); diff --git a/state.c b/state.c index a9475a7ce..ff95d2a9c 100644 --- a/state.c +++ b/state.c @@ -180,8 +180,11 @@ enum state state(struct peer *peer, case STATE_OPEN_WAIT_FOR_COMMIT_SIG: if (input_is(input, PKT_OPEN_COMMIT_SIG)) { const char *db_err; + + peer->local.commit->sig = tal(peer->local.commit, + struct bitcoin_signature); err = accept_pkt_open_commit_sig(peer, pkt, - &peer->local.commit->sig); + peer->local.commit->sig); if (!err && !check_tx_sig(peer->dstate->secpctx, peer->local.commit->tx, 0, @@ -192,6 +195,8 @@ enum state state(struct peer *peer, err = pkt_err(peer, "Bad signature"); if (err) { + peer->local.commit->sig + = tal_free(peer->local.commit->sig); bitcoin_release_anchor(peer, INPUT_NONE); peer_open_complete(peer, err->error->problem); goto err_breakdown;