Check for misuse of funding_transaction_generated and panic 2018-08-announcement_sigs_erroraction
authorMatt Corallo <git@bluematt.me>
Fri, 31 Aug 2018 20:46:55 +0000 (16:46 -0400)
committerMatt Corallo <git@bluematt.me>
Fri, 31 Aug 2018 21:00:44 +0000 (17:00 -0400)
src/ln/channel.rs

index 14a5589e7891ab661f275c74e8e292077b4d83c3..a34db5dc7165dd31c49e5e7af4fae1c815ba2433 100644 (file)
@@ -2113,7 +2113,16 @@ impl Channel {
                                if tx.txid() == self.channel_monitor.get_funding_txo().unwrap().txid {
                                        let txo_idx = self.channel_monitor.get_funding_txo().unwrap().index as usize;
                                        if txo_idx >= tx.output.len() || tx.output[txo_idx].script_pubkey != self.get_funding_redeemscript().to_v0_p2wsh() ||
-                                               tx.output[txo_idx].value != self.channel_value_satoshis {
+                                                       tx.output[txo_idx].value != self.channel_value_satoshis {
+                                               if self.channel_outbound {
+                                                       // If we generated the funding transaction and it doesn't match what it
+                                                       // should, the client is really broken and we should just panic and
+                                                       // tell them off. That said, because hash collisions happen with high
+                                                       // probability in fuzztarget mode, if we're fuzzing we just close the
+                                                       // channel and move on.
+                                                       #[cfg(not(feature = "fuzztarget"))]
+                                                       panic!("Client called ChannelManager::funding_transaction_generated with bogus transaction!");
+                                               }
                                                self.channel_state = ChannelState::ShutdownComplete as u32;
                                                self.channel_update_count += 1;
                                                return Err(HandleError{err: "funding tx had wrong script/value", action: Some(ErrorAction::DisconnectPeer{msg: None})});