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;