Skip to content

Commit dfbc6c6

Browse files
authored
Merge pull request #265 from TheBlueMatt/2018-12-fuzz-fix-no-witness
Fix crash on no-witness tx in ChannelMonitor found by fuzzer
2 parents 0d7156f + 4f9b0fb commit dfbc6c6

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

fuzz/fuzz_targets/full_stack_target.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use bitcoin::blockdata::block::BlockHeader;
77
use bitcoin::blockdata::transaction::{Transaction, TxOut};
88
use bitcoin::blockdata::script::{Builder, Script};
99
use bitcoin::blockdata::opcodes;
10-
use bitcoin::consensus::encode::{deserialize, serialize};
10+
use bitcoin::consensus::encode::deserialize;
1111
use bitcoin::network::constants::Network;
1212
use bitcoin::util::hash::{BitcoinHash, Sha256dHash, Hash160};
1313

fuzz/fuzz_targets/utils/test_logger.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ pub struct TestLogger {}
44

55
impl Logger for TestLogger {
66
fn log(&self, record: &Record) {
7-
#[cfg(any(test, not(feature = "fuzztarget")))]
7+
#[cfg(test)]
88
println!("{:<5} [{} : {}, {}] {}", record.level.to_string(), record.module_path, record.file, record.line, record.args);
9+
#[cfg(not(test))]
10+
let _ = format!("{}", record.args);
911
}
1012
}

src/ln/channelmonitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1386,7 +1386,7 @@ impl ChannelMonitor {
13861386

13871387
/// Generate a spendable output event when closing_transaction get registered onchain.
13881388
fn check_spend_closing_transaction(&self, tx: &Transaction) -> Option<SpendableOutputDescriptor> {
1389-
if tx.input[0].sequence == 0xFFFFFFFF && tx.input[0].witness.last().unwrap().len() == 71 {
1389+
if tx.input[0].sequence == 0xFFFFFFFF && !tx.input[0].witness.is_empty() && tx.input[0].witness.last().unwrap().len() == 71 {
13901390
match self.key_storage {
13911391
KeyStorage::PrivMode { ref shutdown_pubkey, .. } => {
13921392
let our_channel_close_key_hash = Hash160::from_data(&shutdown_pubkey.serialize());

0 commit comments

Comments
 (0)