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 <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2016-11-04 11:17:04 +10:30
parent ac7d80bbeb
commit de2ffd8985
3 changed files with 10 additions and 8 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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;