Browse Source

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>
ppa-0.6.1
Rusty Russell 9 years ago
parent
commit
de2ffd8985
  1. 9
      daemon/packets.c
  2. 2
      daemon/packets.h
  3. 7
      state.c

9
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, 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; 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"); return pkt_err(peer, "Malformed signature");
*sig = tal(peer, struct bitcoin_signature); sig->stype = SIGHASH_ALL;
(*sig)->stype = SIGHASH_ALL;
(*sig)->sig = signature;
return NULL; return NULL;
} }

2
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_anchor(struct peer *peer, const Pkt *pkt);
Pkt *accept_pkt_open_commit_sig(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); Pkt *accept_pkt_open_complete(struct peer *peer, const Pkt *pkt);

7
state.c

@ -180,8 +180,11 @@ enum state state(struct peer *peer,
case STATE_OPEN_WAIT_FOR_COMMIT_SIG: case STATE_OPEN_WAIT_FOR_COMMIT_SIG:
if (input_is(input, PKT_OPEN_COMMIT_SIG)) { if (input_is(input, PKT_OPEN_COMMIT_SIG)) {
const char *db_err; const char *db_err;
peer->local.commit->sig = tal(peer->local.commit,
struct bitcoin_signature);
err = accept_pkt_open_commit_sig(peer, pkt, err = accept_pkt_open_commit_sig(peer, pkt,
&peer->local.commit->sig); peer->local.commit->sig);
if (!err && if (!err &&
!check_tx_sig(peer->dstate->secpctx, !check_tx_sig(peer->dstate->secpctx,
peer->local.commit->tx, 0, peer->local.commit->tx, 0,
@ -192,6 +195,8 @@ enum state state(struct peer *peer,
err = pkt_err(peer, "Bad signature"); err = pkt_err(peer, "Bad signature");
if (err) { if (err) {
peer->local.commit->sig
= tal_free(peer->local.commit->sig);
bitcoin_release_anchor(peer, INPUT_NONE); bitcoin_release_anchor(peer, INPUT_NONE);
peer_open_complete(peer, err->error->problem); peer_open_complete(peer, err->error->problem);
goto err_breakdown; goto err_breakdown;

Loading…
Cancel
Save