From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Wed, 5 Feb 2020 01:23:44 +0000 (+0000) Subject: Merge pull request #454 from TheBlueMatt/2020-01-fuzz-mega-value X-Git-Tag: v0.0.12~146 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=425e4adbf23e9b67ea03457375812f758e95c9e4;hp=8ee626c9a4b8b3477acb772ae5de0e49704183e6;p=rust-lightning Merge pull request #454 from TheBlueMatt/2020-01-fuzz-mega-value Panic on txn with value > 21mill in ChannelMonitor::block_connected, Clean up fuzz targets a bit --- diff --git a/fuzz/src/bin/chanmon_consistency_target.rs b/fuzz/src/bin/chanmon_consistency_target.rs index a4a0bf23..a6d3ff06 100644 --- a/fuzz/src/bin/chanmon_consistency_target.rs +++ b/fuzz/src/bin/chanmon_consistency_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::chanmon_consistency::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); chanmon_consistency_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + chanmon_consistency_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/chanmon_consistency") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + chanmon_consistency_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/chanmon_deser_target.rs b/fuzz/src/bin/chanmon_deser_target.rs index 91bc66c1..91d5f1e1 100644 --- a/fuzz/src/bin/chanmon_deser_target.rs +++ b/fuzz/src/bin/chanmon_deser_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::chanmon_deser::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); chanmon_deser_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + chanmon_deser_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/chanmon_deser") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + chanmon_deser_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/full_stack_target.rs b/fuzz/src/bin/full_stack_target.rs index 4dbf0cc9..955202d2 100644 --- a/fuzz/src/bin/full_stack_target.rs +++ b/fuzz/src/bin/full_stack_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::full_stack::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); full_stack_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + full_stack_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/full_stack") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + full_stack_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_accept_channel_target.rs b/fuzz/src/bin/msg_accept_channel_target.rs index c2356011..8112ebf9 100644 --- a/fuzz/src/bin/msg_accept_channel_target.rs +++ b/fuzz/src/bin/msg_accept_channel_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_accept_channel::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_accept_channel_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_accept_channel_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_accept_channel") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_accept_channel_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_announcement_signatures_target.rs b/fuzz/src/bin/msg_announcement_signatures_target.rs index 54f3d823..f234dadf 100644 --- a/fuzz/src/bin/msg_announcement_signatures_target.rs +++ b/fuzz/src/bin/msg_announcement_signatures_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_announcement_signatures::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_announcement_signatures_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_announcement_signatures_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_announcement_signatures") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_announcement_signatures_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_channel_announcement_target.rs b/fuzz/src/bin/msg_channel_announcement_target.rs index 5ab797f6..a2a63643 100644 --- a/fuzz/src/bin/msg_channel_announcement_target.rs +++ b/fuzz/src/bin/msg_channel_announcement_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_channel_announcement::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_channel_announcement_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_channel_announcement_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_channel_announcement") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_channel_announcement_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_channel_reestablish_target.rs b/fuzz/src/bin/msg_channel_reestablish_target.rs index 79b23e40..908d2067 100644 --- a/fuzz/src/bin/msg_channel_reestablish_target.rs +++ b/fuzz/src/bin/msg_channel_reestablish_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_channel_reestablish::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_channel_reestablish_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_channel_reestablish_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_channel_reestablish") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_channel_reestablish_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_channel_update_target.rs b/fuzz/src/bin/msg_channel_update_target.rs index f9dffda2..6eb7ba19 100644 --- a/fuzz/src/bin/msg_channel_update_target.rs +++ b/fuzz/src/bin/msg_channel_update_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_channel_update::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_channel_update_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_channel_update_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_channel_update") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_channel_update_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_closing_signed_target.rs b/fuzz/src/bin/msg_closing_signed_target.rs index eee7145c..3377ffd6 100644 --- a/fuzz/src/bin/msg_closing_signed_target.rs +++ b/fuzz/src/bin/msg_closing_signed_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_closing_signed::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_closing_signed_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_closing_signed_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_closing_signed") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_closing_signed_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_commitment_signed_target.rs b/fuzz/src/bin/msg_commitment_signed_target.rs index 6ce13f47..a9cef5fe 100644 --- a/fuzz/src/bin/msg_commitment_signed_target.rs +++ b/fuzz/src/bin/msg_commitment_signed_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_commitment_signed::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_commitment_signed_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_commitment_signed_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_commitment_signed") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_commitment_signed_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_decoded_onion_error_packet_target.rs b/fuzz/src/bin/msg_decoded_onion_error_packet_target.rs index c5c9d4a5..cefcf06b 100644 --- a/fuzz/src/bin/msg_decoded_onion_error_packet_target.rs +++ b/fuzz/src/bin/msg_decoded_onion_error_packet_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_decoded_onion_error_packet::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_decoded_onion_error_packet_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_decoded_onion_error_packet_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_decoded_onion_error_packet") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_decoded_onion_error_packet_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_error_message_target.rs b/fuzz/src/bin/msg_error_message_target.rs index 1fa04d96..c8706d21 100644 --- a/fuzz/src/bin/msg_error_message_target.rs +++ b/fuzz/src/bin/msg_error_message_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_error_message::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_error_message_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_error_message_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_error_message") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_error_message_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_funding_created_target.rs b/fuzz/src/bin/msg_funding_created_target.rs index e9fedc3c..f51caf57 100644 --- a/fuzz/src/bin/msg_funding_created_target.rs +++ b/fuzz/src/bin/msg_funding_created_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_funding_created::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_funding_created_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_funding_created_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_funding_created") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_funding_created_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_funding_locked_target.rs b/fuzz/src/bin/msg_funding_locked_target.rs index 3665ce99..14954096 100644 --- a/fuzz/src/bin/msg_funding_locked_target.rs +++ b/fuzz/src/bin/msg_funding_locked_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_funding_locked::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_funding_locked_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_funding_locked_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_funding_locked") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_funding_locked_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_funding_signed_target.rs b/fuzz/src/bin/msg_funding_signed_target.rs index 057cc6fe..dcd5dd9d 100644 --- a/fuzz/src/bin/msg_funding_signed_target.rs +++ b/fuzz/src/bin/msg_funding_signed_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_funding_signed::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_funding_signed_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_funding_signed_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_funding_signed") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_funding_signed_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_init_target.rs b/fuzz/src/bin/msg_init_target.rs index 0bcbeda1..4dd75f2e 100644 --- a/fuzz/src/bin/msg_init_target.rs +++ b/fuzz/src/bin/msg_init_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_init::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_init_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_init_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_init") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_init_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_node_announcement_target.rs b/fuzz/src/bin/msg_node_announcement_target.rs index e3dde9fb..ae778b67 100644 --- a/fuzz/src/bin/msg_node_announcement_target.rs +++ b/fuzz/src/bin/msg_node_announcement_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_node_announcement::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_node_announcement_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_node_announcement_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_node_announcement") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_node_announcement_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_onion_hop_data_target.rs b/fuzz/src/bin/msg_onion_hop_data_target.rs index ea2b6e4d..95453bc9 100644 --- a/fuzz/src/bin/msg_onion_hop_data_target.rs +++ b/fuzz/src/bin/msg_onion_hop_data_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_onion_hop_data::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_onion_hop_data_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_onion_hop_data_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_onion_hop_data") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_onion_hop_data_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_open_channel_target.rs b/fuzz/src/bin/msg_open_channel_target.rs index 690db561..fa385e56 100644 --- a/fuzz/src/bin/msg_open_channel_target.rs +++ b/fuzz/src/bin/msg_open_channel_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_open_channel::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_open_channel_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_open_channel_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_open_channel") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_open_channel_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_ping_target.rs b/fuzz/src/bin/msg_ping_target.rs index 871c8e14..e8b0a598 100644 --- a/fuzz/src/bin/msg_ping_target.rs +++ b/fuzz/src/bin/msg_ping_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_ping::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_ping_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_ping_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_ping") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_ping_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_pong_target.rs b/fuzz/src/bin/msg_pong_target.rs index c4fc4616..f7408ec5 100644 --- a/fuzz/src/bin/msg_pong_target.rs +++ b/fuzz/src/bin/msg_pong_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_pong::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_pong_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_pong_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_pong") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_pong_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_revoke_and_ack_target.rs b/fuzz/src/bin/msg_revoke_and_ack_target.rs index 2c844c2a..47f125a4 100644 --- a/fuzz/src/bin/msg_revoke_and_ack_target.rs +++ b/fuzz/src/bin/msg_revoke_and_ack_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_revoke_and_ack::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_revoke_and_ack_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_revoke_and_ack_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_revoke_and_ack") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_revoke_and_ack_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_shutdown_target.rs b/fuzz/src/bin/msg_shutdown_target.rs index ea1678ce..fb400f77 100644 --- a/fuzz/src/bin/msg_shutdown_target.rs +++ b/fuzz/src/bin/msg_shutdown_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_shutdown::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_shutdown_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_shutdown_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_shutdown") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_shutdown_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_update_add_htlc_target.rs b/fuzz/src/bin/msg_update_add_htlc_target.rs index cc8f6730..e433a446 100644 --- a/fuzz/src/bin/msg_update_add_htlc_target.rs +++ b/fuzz/src/bin/msg_update_add_htlc_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_update_add_htlc::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_update_add_htlc_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_update_add_htlc_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_update_add_htlc") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_update_add_htlc_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_update_fail_htlc_target.rs b/fuzz/src/bin/msg_update_fail_htlc_target.rs index 5099fed1..ee8bb3af 100644 --- a/fuzz/src/bin/msg_update_fail_htlc_target.rs +++ b/fuzz/src/bin/msg_update_fail_htlc_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_update_fail_htlc::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_update_fail_htlc_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_update_fail_htlc_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_update_fail_htlc") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_update_fail_htlc_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_update_fail_malformed_htlc_target.rs b/fuzz/src/bin/msg_update_fail_malformed_htlc_target.rs index 9eea9279..06eb31d3 100644 --- a/fuzz/src/bin/msg_update_fail_malformed_htlc_target.rs +++ b/fuzz/src/bin/msg_update_fail_malformed_htlc_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_update_fail_malformed_htlc::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_update_fail_malformed_htlc_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_update_fail_malformed_htlc_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_update_fail_malformed_htlc") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_update_fail_malformed_htlc_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_update_fee_target.rs b/fuzz/src/bin/msg_update_fee_target.rs index 50a96aa0..12e5c384 100644 --- a/fuzz/src/bin/msg_update_fee_target.rs +++ b/fuzz/src/bin/msg_update_fee_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_update_fee::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_update_fee_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_update_fee_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_update_fee") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_update_fee_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/msg_update_fulfill_htlc_target.rs b/fuzz/src/bin/msg_update_fulfill_htlc_target.rs index 35bf38e9..a5a8bda3 100644 --- a/fuzz/src/bin/msg_update_fulfill_htlc_target.rs +++ b/fuzz/src/bin/msg_update_fulfill_htlc_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::msg_targets::msg_update_fulfill_htlc::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); msg_update_fulfill_htlc_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + msg_update_fulfill_htlc_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/msg_update_fulfill_htlc") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + msg_update_fulfill_htlc_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/peer_crypt_target.rs b/fuzz/src/bin/peer_crypt_target.rs index 8c1f7b01..b32854f0 100644 --- a/fuzz/src/bin/peer_crypt_target.rs +++ b/fuzz/src/bin/peer_crypt_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::peer_crypt::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); peer_crypt_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + peer_crypt_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/peer_crypt") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + peer_crypt_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/router_target.rs b/fuzz/src/bin/router_target.rs index 9b26a176..3e82b196 100644 --- a/fuzz/src/bin/router_target.rs +++ b/fuzz/src/bin/router_target.rs @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::router::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); router_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + router_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/router") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + router_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/bin/target_template.txt b/fuzz/src/bin/target_template.txt index 3ebb480d..9815e9cc 100644 --- a/fuzz/src/bin/target_template.txt +++ b/fuzz/src/bin/target_template.txt @@ -1,12 +1,12 @@ // This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. -//Uncomment this for libfuzzer builds: -//#![no_main] +#![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::TARGET_MOD::*; +use std::fs; use std::io::Read; #[cfg(feature = "afl")] @@ -42,3 +42,18 @@ fn main() { std::io::stdin().read_to_end(&mut data).unwrap(); TARGET_NAME_run(data.as_ptr(), data.len()); } + +#[test] +fn run_test_cases() { + let mut data: Vec = vec![0]; + TARGET_NAME_run(data.as_ptr(), data.len()); + if let Ok(tests) = fs::read_dir("test_cases/TARGET_NAME") { + for test in tests { + data.clear(); + let path = test.unwrap().path(); + println!("Running test {}...", path.file_name().unwrap().to_str().unwrap()); + fs::File::open(path).unwrap().read_to_end(&mut data).unwrap(); + TARGET_NAME_run(data.as_ptr(), data.len()); + } + } +} diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs index b961b23a..cd22dc59 100644 --- a/fuzz/src/chanmon_consistency.rs +++ b/fuzz/src/chanmon_consistency.rs @@ -750,11 +750,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn chanmon_consistency_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/chanmon_deser.rs b/fuzz/src/chanmon_deser.rs index dbd30266..c9042dd4 100644 --- a/fuzz/src/chanmon_deser.rs +++ b/fuzz/src/chanmon_deser.rs @@ -41,11 +41,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn chanmon_deser_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/full_stack.rs b/fuzz/src/full_stack.rs index 36e6d731..568f8085 100644 --- a/fuzz/src/full_stack.rs +++ b/fuzz/src/full_stack.rs @@ -491,6 +491,12 @@ pub fn do_test(data: &[u8], logger: &Arc) { } else { let txres: Result = deserialize(get_slice!(txlen)); if let Ok(tx) = txres { + let mut output_val = 0; + for out in tx.output.iter() { + if out.value > 21_000_000_0000_0000 { return; } + output_val += out.value; + if output_val > 21_000_000_0000_0000 { return; } + } loss_detector.connect_block(&[tx]); } else { return; @@ -546,12 +552,6 @@ mod tests { use std::collections::HashMap; use std::sync::{Arc, Mutex}; - #[test] - fn duplicate_crash() { - let logger: Arc = Arc::new(test_logger::TestLogger::new("".to_owned())); - super::do_test(&::hex::decode("00").unwrap(), &logger); - } - struct TrackingLogger { /// (module, message) -> count pub lines: Mutex>, diff --git a/fuzz/src/msg_targets/msg_accept_channel.rs b/fuzz/src/msg_targets/msg_accept_channel.rs index 04e3cc24..94baec59 100644 --- a/fuzz/src/msg_targets/msg_accept_channel.rs +++ b/fuzz/src/msg_targets/msg_accept_channel.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_accept_channel_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_announcement_signatures.rs b/fuzz/src/msg_targets/msg_announcement_signatures.rs index 1df6aeca..065295b9 100644 --- a/fuzz/src/msg_targets/msg_announcement_signatures.rs +++ b/fuzz/src/msg_targets/msg_announcement_signatures.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_announcement_signatures_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_channel_announcement.rs b/fuzz/src/msg_targets/msg_channel_announcement.rs index 9e2363ea..dafcdafe 100644 --- a/fuzz/src/msg_targets/msg_channel_announcement.rs +++ b/fuzz/src/msg_targets/msg_channel_announcement.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_channel_announcement_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_channel_reestablish.rs b/fuzz/src/msg_targets/msg_channel_reestablish.rs index a81f0aeb..8d05450e 100644 --- a/fuzz/src/msg_targets/msg_channel_reestablish.rs +++ b/fuzz/src/msg_targets/msg_channel_reestablish.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_channel_reestablish_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_channel_update.rs b/fuzz/src/msg_targets/msg_channel_update.rs index aaef33ea..0d3edfe8 100644 --- a/fuzz/src/msg_targets/msg_channel_update.rs +++ b/fuzz/src/msg_targets/msg_channel_update.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_channel_update_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_closing_signed.rs b/fuzz/src/msg_targets/msg_closing_signed.rs index 9a959d58..8043d9de 100644 --- a/fuzz/src/msg_targets/msg_closing_signed.rs +++ b/fuzz/src/msg_targets/msg_closing_signed.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_closing_signed_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_commitment_signed.rs b/fuzz/src/msg_targets/msg_commitment_signed.rs index e84c9871..319f46c5 100644 --- a/fuzz/src/msg_targets/msg_commitment_signed.rs +++ b/fuzz/src/msg_targets/msg_commitment_signed.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_commitment_signed_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_decoded_onion_error_packet.rs b/fuzz/src/msg_targets/msg_decoded_onion_error_packet.rs index e49d22b3..d6e5a829 100644 --- a/fuzz/src/msg_targets/msg_decoded_onion_error_packet.rs +++ b/fuzz/src/msg_targets/msg_decoded_onion_error_packet.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_decoded_onion_error_packet_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_error_message.rs b/fuzz/src/msg_targets/msg_error_message.rs index 6b5bcccf..16594953 100644 --- a/fuzz/src/msg_targets/msg_error_message.rs +++ b/fuzz/src/msg_targets/msg_error_message.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_error_message_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_funding_created.rs b/fuzz/src/msg_targets/msg_funding_created.rs index 8e468a85..cc322cbb 100644 --- a/fuzz/src/msg_targets/msg_funding_created.rs +++ b/fuzz/src/msg_targets/msg_funding_created.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_funding_created_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_funding_locked.rs b/fuzz/src/msg_targets/msg_funding_locked.rs index 29e9c8a6..a546ed8b 100644 --- a/fuzz/src/msg_targets/msg_funding_locked.rs +++ b/fuzz/src/msg_targets/msg_funding_locked.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_funding_locked_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_funding_signed.rs b/fuzz/src/msg_targets/msg_funding_signed.rs index 412558fe..0210b5ec 100644 --- a/fuzz/src/msg_targets/msg_funding_signed.rs +++ b/fuzz/src/msg_targets/msg_funding_signed.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_funding_signed_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_init.rs b/fuzz/src/msg_targets/msg_init.rs index dbc07458..52b92acd 100644 --- a/fuzz/src/msg_targets/msg_init.rs +++ b/fuzz/src/msg_targets/msg_init.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_init_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_node_announcement.rs b/fuzz/src/msg_targets/msg_node_announcement.rs index 95de73ba..bb09f87e 100644 --- a/fuzz/src/msg_targets/msg_node_announcement.rs +++ b/fuzz/src/msg_targets/msg_node_announcement.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_node_announcement_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_onion_hop_data.rs b/fuzz/src/msg_targets/msg_onion_hop_data.rs index 0b02302a..e446a063 100644 --- a/fuzz/src/msg_targets/msg_onion_hop_data.rs +++ b/fuzz/src/msg_targets/msg_onion_hop_data.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_onion_hop_data_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_open_channel.rs b/fuzz/src/msg_targets/msg_open_channel.rs index 2688b418..9c700c2b 100644 --- a/fuzz/src/msg_targets/msg_open_channel.rs +++ b/fuzz/src/msg_targets/msg_open_channel.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_open_channel_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_ping.rs b/fuzz/src/msg_targets/msg_ping.rs index 21b74ad9..67e2382f 100644 --- a/fuzz/src/msg_targets/msg_ping.rs +++ b/fuzz/src/msg_targets/msg_ping.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_ping_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_pong.rs b/fuzz/src/msg_targets/msg_pong.rs index c8fc4c59..cec5c5ad 100644 --- a/fuzz/src/msg_targets/msg_pong.rs +++ b/fuzz/src/msg_targets/msg_pong.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_pong_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_revoke_and_ack.rs b/fuzz/src/msg_targets/msg_revoke_and_ack.rs index ca5412f5..6df64e3e 100644 --- a/fuzz/src/msg_targets/msg_revoke_and_ack.rs +++ b/fuzz/src/msg_targets/msg_revoke_and_ack.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_revoke_and_ack_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_shutdown.rs b/fuzz/src/msg_targets/msg_shutdown.rs index c249ffce..d70d9a6a 100644 --- a/fuzz/src/msg_targets/msg_shutdown.rs +++ b/fuzz/src/msg_targets/msg_shutdown.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_shutdown_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_target_template.txt b/fuzz/src/msg_targets/msg_target_template.txt index 6877918a..ea785ff4 100644 --- a/fuzz/src/msg_targets/msg_target_template.txt +++ b/fuzz/src/msg_targets/msg_target_template.txt @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn TARGET_NAME_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_update_add_htlc.rs b/fuzz/src/msg_targets/msg_update_add_htlc.rs index 960399ab..13b648f0 100644 --- a/fuzz/src/msg_targets/msg_update_add_htlc.rs +++ b/fuzz/src/msg_targets/msg_update_add_htlc.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_update_add_htlc_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_update_fail_htlc.rs b/fuzz/src/msg_targets/msg_update_fail_htlc.rs index 8eb2870d..e21d2146 100644 --- a/fuzz/src/msg_targets/msg_update_fail_htlc.rs +++ b/fuzz/src/msg_targets/msg_update_fail_htlc.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_update_fail_htlc_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_update_fail_malformed_htlc.rs b/fuzz/src/msg_targets/msg_update_fail_malformed_htlc.rs index 4d1ab282..e27b8528 100644 --- a/fuzz/src/msg_targets/msg_update_fail_malformed_htlc.rs +++ b/fuzz/src/msg_targets/msg_update_fail_malformed_htlc.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_update_fail_malformed_htlc_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_update_fee.rs b/fuzz/src/msg_targets/msg_update_fee.rs index 8d3bb894..5051bb87 100644 --- a/fuzz/src/msg_targets/msg_update_fee.rs +++ b/fuzz/src/msg_targets/msg_update_fee.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_update_fee_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/msg_targets/msg_update_fulfill_htlc.rs b/fuzz/src/msg_targets/msg_update_fulfill_htlc.rs index ab727708..b8b3d98a 100644 --- a/fuzz/src/msg_targets/msg_update_fulfill_htlc.rs +++ b/fuzz/src/msg_targets/msg_update_fulfill_htlc.rs @@ -14,11 +14,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn msg_update_fulfill_htlc_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/fuzz/src/peer_crypt.rs b/fuzz/src/peer_crypt.rs index 8e616446..e0ff02f0 100644 --- a/fuzz/src/peer_crypt.rs +++ b/fuzz/src/peer_crypt.rs @@ -79,11 +79,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn peer_crypt_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("01").unwrap()); - } -} diff --git a/fuzz/src/router.rs b/fuzz/src/router.rs index fbb62922..434e1b65 100644 --- a/fuzz/src/router.rs +++ b/fuzz/src/router.rs @@ -237,11 +237,3 @@ pub fn do_test(data: &[u8]) { pub extern "C" fn router_run(data: *const u8, datalen: usize) { do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); } - -#[cfg(test)] -mod tests { - #[test] - fn duplicate_crash() { - super::do_test(&::hex::decode("00").unwrap()); - } -} diff --git a/lightning/src/ln/channelmonitor.rs b/lightning/src/ln/channelmonitor.rs index 0a70eb0e..51446ccc 100644 --- a/lightning/src/ln/channelmonitor.rs +++ b/lightning/src/ln/channelmonitor.rs @@ -2363,6 +2363,15 @@ impl ChannelMonitor { } fn block_connected(&mut self, txn_matched: &[&Transaction], height: u32, block_hash: &Sha256dHash, broadcaster: &BroadcasterInterface, fee_estimator: &FeeEstimator)-> (Vec<(Sha256dHash, Vec)>, Vec, Vec<(HTLCSource, Option, PaymentHash)>) { + for tx in txn_matched { + let mut output_val = 0; + for out in tx.output.iter() { + if out.value > 21_000_000_0000_0000 { panic!("Value-overflowing transaction provided to block connected"); } + output_val += out.value; + if output_val > 21_000_000_0000_0000 { panic!("Value-overflowing transaction provided to block connected"); } + } + } + log_trace!(self, "Block {} at height {} connected with {} txn matched", block_hash, height, txn_matched.len()); let mut watch_outputs = Vec::new(); let mut spendable_outputs = Vec::new();