From 4480bb5eec22cab0c1f01bf7c1f20cc96dca7d72 Mon Sep 17 00:00:00 2001 From: Kiminuo Date: Sat, 6 Jun 2020 13:01:07 +0200 Subject: [PATCH 1/2] Move `extend_vec_from_hex` to lib.rs --- fuzz/fuzz_targets/roundtrip_concrete.rs | 19 +++------------ fuzz/fuzz_targets/roundtrip_descriptor.rs | 20 +++------------- .../roundtrip_miniscript_script.rs | 19 +++------------ fuzz/fuzz_targets/roundtrip_miniscript_str.rs | 20 +++------------- fuzz/fuzz_targets/roundtrip_policy.rs | 19 +++------------ fuzz/fuzz_targets/roundtrip_semantic.rs | 23 ++++--------------- fuzz/src/util.rs | 17 ++++++++++++++ src/lib.rs | 2 +- 8 files changed, 38 insertions(+), 101 deletions(-) create mode 100644 fuzz/src/util.rs diff --git a/fuzz/fuzz_targets/roundtrip_concrete.rs b/fuzz/fuzz_targets/roundtrip_concrete.rs index fdaf62f21..6a30ef797 100644 --- a/fuzz/fuzz_targets/roundtrip_concrete.rs +++ b/fuzz/fuzz_targets/roundtrip_concrete.rs @@ -1,6 +1,8 @@ extern crate miniscript; +#[path = "../src/util.rs"] mod util; + use std::str::FromStr; use miniscript::{policy, DummyKey}; @@ -36,22 +38,7 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } + use util::extend_vec_from_hex; #[test] fn duplicate_crash() { diff --git a/fuzz/fuzz_targets/roundtrip_descriptor.rs b/fuzz/fuzz_targets/roundtrip_descriptor.rs index ac1b2bcdb..f540d239d 100644 --- a/fuzz/fuzz_targets/roundtrip_descriptor.rs +++ b/fuzz/fuzz_targets/roundtrip_descriptor.rs @@ -1,8 +1,9 @@ extern crate miniscript; -use miniscript::{Descriptor, DummyKey}; +#[path = "../src/util.rs"] mod util; +use miniscript::{Descriptor, DummyKey}; use std::str::FromStr; fn do_test(data: &[u8]) { @@ -36,22 +37,7 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } + use util::extend_vec_from_hex; #[test] fn duplicate_crash() { diff --git a/fuzz/fuzz_targets/roundtrip_miniscript_script.rs b/fuzz/fuzz_targets/roundtrip_miniscript_script.rs index 3ce8ad939..7f1d713f9 100644 --- a/fuzz/fuzz_targets/roundtrip_miniscript_script.rs +++ b/fuzz/fuzz_targets/roundtrip_miniscript_script.rs @@ -1,6 +1,8 @@ extern crate miniscript; +#[path = "../src/util.rs"] mod util; + use miniscript::Miniscript; use miniscript::bitcoin::blockdata::script; @@ -37,22 +39,7 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } + use util::extend_vec_from_hex; #[test] fn duplicate_crash() { diff --git a/fuzz/fuzz_targets/roundtrip_miniscript_str.rs b/fuzz/fuzz_targets/roundtrip_miniscript_str.rs index 3cf46712b..d0f5bd4b5 100644 --- a/fuzz/fuzz_targets/roundtrip_miniscript_str.rs +++ b/fuzz/fuzz_targets/roundtrip_miniscript_str.rs @@ -1,8 +1,9 @@ extern crate miniscript; -use std::str::FromStr; +#[path = "../src/util.rs"] mod util; +use std::str::FromStr; use miniscript::{DummyKey}; use miniscript::Miniscript; @@ -36,22 +37,7 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } + use util::extend_vec_from_hex; #[test] fn duplicate_crash() { diff --git a/fuzz/fuzz_targets/roundtrip_policy.rs b/fuzz/fuzz_targets/roundtrip_policy.rs index ab93e29cf..27f279b6d 100644 --- a/fuzz/fuzz_targets/roundtrip_policy.rs +++ b/fuzz/fuzz_targets/roundtrip_policy.rs @@ -1,6 +1,8 @@ extern crate miniscript; +#[path = "../src/util.rs"] mod util; + use std::str::FromStr; use miniscript::{policy, DummyKey}; @@ -41,22 +43,7 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } + use util::extend_vec_from_hex; #[test] fn duplicate_crash() { diff --git a/fuzz/fuzz_targets/roundtrip_semantic.rs b/fuzz/fuzz_targets/roundtrip_semantic.rs index e65e95a48..a78c2fc09 100644 --- a/fuzz/fuzz_targets/roundtrip_semantic.rs +++ b/fuzz/fuzz_targets/roundtrip_semantic.rs @@ -1,6 +1,8 @@ extern crate miniscript; +#[path = "../src/util.rs"] mod util; + use std::str::FromStr; use miniscript::{policy, DummyKey}; @@ -36,27 +38,12 @@ fn main() { #[cfg(test)] mod tests { - fn extend_vec_from_hex(hex: &str, out: &mut Vec) { - let mut b = 0; - for (idx, c) in hex.as_bytes().iter().enumerate() { - b <<= 4; - match *c { - b'A'...b'F' => b |= c - b'A' + 10, - b'a'...b'f' => b |= c - b'a' + 10, - b'0'...b'9' => b |= c - b'0', - _ => panic!("Bad hex"), - } - if (idx & 1) == 1 { - out.push(b); - b = 0; - } - } - } - + use util::extend_vec_from_hex; + #[test] fn duplicate_crash() { let mut a = Vec::new(); extend_vec_from_hex("048531e80700ae6400670000af5168", &mut a); super::do_test(&a); } -} +} \ No newline at end of file diff --git a/fuzz/src/util.rs b/fuzz/src/util.rs new file mode 100644 index 000000000..8d2ba7305 --- /dev/null +++ b/fuzz/src/util.rs @@ -0,0 +1,17 @@ +#[cfg(test)] +pub fn extend_vec_from_hex(hex: &str, out: &mut Vec) { + let mut b = 0; + for (idx, c) in hex.as_bytes().iter().enumerate() { + b <<= 4; + match *c { + b'A'...b'F' => b |= c - b'A' + 10, + b'a'...b'f' => b |= c - b'a' + 10, + b'0'...b'9' => b |= c - b'0', + _ => panic!("Bad hex"), + } + if (idx & 1) == 1 { + out.push(b); + b = 0; + } + } +} diff --git a/src/lib.rs b/src/lib.rs index bd8d10465..16a6bc2fe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -445,4 +445,4 @@ pub fn script_num_size(n: usize) -> usize { fn hex_script(s: &str) -> bitcoin::Script { let v: Vec = bitcoin::hashes::hex::FromHex::from_hex(s).unwrap(); bitcoin::Script::from(v) -} +} \ No newline at end of file From 4a24ab2df8b17d5ce72bba62d007bdfd0492af28 Mon Sep 17 00:00:00 2001 From: Kiminuo Date: Sat, 6 Jun 2020 13:14:20 +0200 Subject: [PATCH 2/2] Move `duplicate_crash_2` test to semantic.rs --- fuzz/fuzz_targets/roundtrip_policy.rs | 7 ------- src/lib.rs | 2 +- src/policy/semantic.rs | 5 +++++ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/fuzz/fuzz_targets/roundtrip_policy.rs b/fuzz/fuzz_targets/roundtrip_policy.rs index 27f279b6d..27d49913b 100644 --- a/fuzz/fuzz_targets/roundtrip_policy.rs +++ b/fuzz/fuzz_targets/roundtrip_policy.rs @@ -51,11 +51,4 @@ mod tests { extend_vec_from_hex("00", &mut a); super::do_test(&a); } - - #[test] - fn duplicate_crash_2() { - let mut a = Vec::new(); - extend_vec_from_hex("746872657368", &mut a); // thresh - super::do_test(&a); - } } diff --git a/src/lib.rs b/src/lib.rs index 16a6bc2fe..bd8d10465 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -445,4 +445,4 @@ pub fn script_num_size(n: usize) -> usize { fn hex_script(s: &str) -> bitcoin::Script { let v: Vec = bitcoin::hashes::hex::FromHex::from_hex(s).unwrap(); bitcoin::Script::from(v) -} \ No newline at end of file +} diff --git a/src/policy/semantic.rs b/src/policy/semantic.rs index e1705bc6f..f0a6b8d62 100644 --- a/src/policy/semantic.rs +++ b/src/policy/semantic.rs @@ -485,6 +485,11 @@ mod tests { )" ) .is_ok()); + + assert_eq!( + StringPolicy::from_str("thresh").unwrap_err().to_string(), + "unexpected «thresh without args»" + ); } #[test]