mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-20 07:34:24 +01:00
state: fix case where we replied to an error with an error.
Found by fixing bogus test in test_state_coverage.c Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
6
state.c
6
state.c
@@ -938,6 +938,10 @@ unexpected_pkt_nocleanup:
|
||||
/*
|
||||
* Unexpected packet, but nothing sent to chain yet, so no cleanup.
|
||||
*/
|
||||
/* Don't reply to an error with an error. */
|
||||
if (input_is(input, PKT_ERROR)) {
|
||||
goto close_nocleanup;
|
||||
}
|
||||
err = unexpected_pkt(ctx, input);
|
||||
goto err_close_nocleanup;
|
||||
|
||||
@@ -955,6 +959,8 @@ err_close_nocleanup:
|
||||
* so there's nothing to clean up.
|
||||
*/
|
||||
add_effect(effect, send_pkt, err);
|
||||
|
||||
close_nocleanup:
|
||||
change_peer_cond(peer, PEER_CMD_OK, PEER_CLOSED);
|
||||
return next_state(peer, cstatus, STATE_CLOSED);
|
||||
|
||||
|
||||
@@ -1418,13 +1418,14 @@ static const char *apply_effects(struct peer *peer,
|
||||
*output = effect->u.send_pkt;
|
||||
|
||||
/* Check for errors. */
|
||||
if (strstarts(pkt, "ERROR_PKT:")) {
|
||||
if (strstarts(pkt, "PKT_ERROR: ")) {
|
||||
/* Some are expected. */
|
||||
if (!streq(pkt, "ERROR_PKT:Commit tx noticed")
|
||||
&& !streq(pkt, "ERROR_PKT:Otherspend noticed")
|
||||
&& !streq(pkt, "ERROR_PKT:Anchor timed out")
|
||||
&& !streq(pkt, "ERROR_PKT:Close timed out")
|
||||
&& !streq(pkt, "ERROR_PKT:Close forced due to HTLCs")) {
|
||||
if (!streq(pkt, "PKT_ERROR: Commit tx noticed")
|
||||
&& !streq(pkt, "PKT_ERROR: Otherspend noticed")
|
||||
&& !streq(pkt, "PKT_ERROR: Error inject")
|
||||
&& !streq(pkt, "PKT_ERROR: Anchor timed out")
|
||||
&& !streq(pkt, "PKT_ERROR: Close timed out")
|
||||
&& !streq(pkt, "PKT_ERROR: Close forced due to HTLCs")) {
|
||||
return pkt;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user