X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fln%2Fchannelmanager.rs;h=a650c89bb44668149cb305a4c0f4b35d307ad279;hb=3c44d6beca2d5c3c50a8454d072ef54f735d5000;hp=8d31c3347f2d285f3b4eaa6ac50d2ae7b3025c3b;hpb=fa2ac8cd8468c4239ab873f9fe4a682877606f94;p=rust-lightning diff --git a/src/ln/channelmanager.rs b/src/ln/channelmanager.rs index 8d31c334..a650c89b 100644 --- a/src/ln/channelmanager.rs +++ b/src/ln/channelmanager.rs @@ -2194,8 +2194,8 @@ impl ChannelManager { //TODO: here and below MsgHandleErrInternal, #153 case return Err(MsgHandleErrInternal::send_err_msg_no_close("Got a message for a channel from the wrong node!", msg.channel_id)); } - if (msg.failure_code & 0x8000) != 0 { - return Err(MsgHandleErrInternal::send_err_msg_close_chan("Got update_fail_malformed_htlc with BADONION set", msg.channel_id)); + if (msg.failure_code & 0x8000) == 0 { + return Err(MsgHandleErrInternal::send_err_msg_close_chan("Got update_fail_malformed_htlc with BADONION not set", msg.channel_id)); } chan.update_fail_malformed_htlc(&msg, HTLCFailReason::Reason { failure_code: msg.failure_code, data: Vec::new() }) .map_err(|e| MsgHandleErrInternal::from_chan_maybe_close(e, msg.channel_id))?; @@ -5708,7 +5708,13 @@ mod tests { get_announce_close_broadcast_events(&nodes, 3, 4); assert_eq!(nodes[3].node.list_channels().len(), 0); assert_eq!(nodes[4].node.list_channels().len(), 0); + } + + #[test] + fn test_justice_tx() { + // Test justice txn built on revoked HTLC-Success tx, against both sides + let nodes = create_network(2); // Create some new channels: let chan_5 = create_announced_chan_between_nodes(&nodes, 0, 1); @@ -5748,6 +5754,9 @@ mod tests { } get_announce_close_broadcast_events(&nodes, 0, 1); + assert_eq!(nodes[0].node.list_channels().len(), 0); + assert_eq!(nodes[1].node.list_channels().len(), 0); + // We test justice_tx build by A on B's revoked HTLC-Success tx // Create some new channels: let chan_6 = create_announced_chan_between_nodes(&nodes, 0, 1);