From 0db3c03ed1e6e9fc6c0c8c8ba34103c262c6d188 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 22 Jan 2016 06:41:47 +1030 Subject: [PATCH] state: fix BITCOIN_HTLC_TOTHEM_SPENT idata. We use both union fields idata->btc and idata->htlc, which is clearly wrong. Have peer_tx_revealed_r_value return the HTLC it's talking about. Signed-off-by: Rusty Russell --- state.c | 5 +++-- state.h | 4 ++-- test/test_state_coverage.c | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/state.c b/state.c index 00f415f4e..d2165ca48 100644 --- a/state.c +++ b/state.c @@ -757,10 +757,11 @@ enum command_status state(const tal_t *ctx, return next_state(peer, cstatus, BITS_TO_STATE(bits)); } else if (input_is(input, BITCOIN_HTLC_TOTHEM_SPENT)) { + const struct htlc *htlc; /* They revealed R value. */ - peer_tx_revealed_r_value(peer, idata->btc); + htlc = peer_tx_revealed_r_value(peer, idata->btc); /* We don't care any more. */ - peer_unwatch_htlc_output(peer, idata->htlc, + peer_unwatch_htlc_output(peer, htlc, INPUT_NO_MORE_HTLCS); return unchanged_state(cstatus); } else if (input_is(input, BITCOIN_HTLC_TOTHEM_TIMEOUT)){ diff --git a/state.h b/state.h index 28b2cf9d1..e10fe600e 100644 --- a/state.h +++ b/state.h @@ -94,8 +94,8 @@ void peer_htlc_done(struct peer *peer); void peer_htlc_aborted(struct peer *peer); /* An on-chain transaction revealed an R value. */ -void peer_tx_revealed_r_value(struct peer *peer, - const struct bitcoin_event *btc); +const struct htlc *peer_tx_revealed_r_value(struct peer *peer, + const struct bitcoin_event *btc); /* Create various kinds of packets, allocated off @ctx */ Pkt *pkt_open(const tal_t *ctx, const struct peer *peer, diff --git a/test/test_state_coverage.c b/test/test_state_coverage.c index e5564a120..3f11b2351 100644 --- a/test/test_state_coverage.c +++ b/test/test_state_coverage.c @@ -1465,11 +1465,12 @@ void peer_htlc_declined(struct peer *peer, const Pkt *pkt) peer->htlc_declined = true; } -void peer_tx_revealed_r_value(struct peer *peer, - const struct bitcoin_event *btc) +const struct htlc *peer_tx_revealed_r_value(struct peer *peer, + const struct bitcoin_event *btc) { const struct htlc *htlc = (struct htlc *)btc; add_rval(peer, htlc->id); + return htlc; } static const char *check_changes(const struct peer *old, struct peer *new,