|
1 | 1 | // SPDX-License-Identifier: CC0-1.0
|
2 | 2 |
|
3 |
| -use honggfuzz::fuzz; |
4 |
| - |
5 |
| -use simplicity::ffi::tests::{ffi::SimplicityErr, run_program, TestUpTo}; |
6 |
| -use simplicity::hashes::sha256::Midstate; |
7 |
| -use simplicity::jet::Elements; |
8 |
| -use simplicity::{BitIter, RedeemNode}; |
| 3 | +#![cfg_attr(fuzzing, no_main)] |
9 | 4 |
|
| 5 | +#[cfg(any(fuzzing, test))] |
10 | 6 | fn do_test(data: &[u8]) {
|
| 7 | + use simplicity::ffi::tests::{ffi::SimplicityErr, run_program, TestUpTo}; |
| 8 | + use simplicity::hashes::sha256::Midstate; |
| 9 | + use simplicity::jet::Elements; |
| 10 | + use simplicity::{BitIter, RedeemNode}; |
| 11 | + |
11 | 12 | // To decode the program length, we first try decoding the program using
|
12 | 13 | // `decode_expression` which will not error on a length check. Alternately
|
13 | 14 | // we could decode using RedeemNode::decode and then extract the length
|
@@ -54,37 +55,21 @@ fn do_test(data: &[u8]) {
|
54 | 55 | }
|
55 | 56 | }
|
56 | 57 |
|
57 |
| -fn main() { |
58 |
| - loop { |
59 |
| - fuzz!(|data| { |
60 |
| - do_test(data); |
61 |
| - }); |
62 |
| - } |
63 |
| -} |
| 58 | +#[cfg(fuzzing)] |
| 59 | +libfuzzer_sys::fuzz_target!(|data| do_test(data)); |
| 60 | + |
| 61 | +#[cfg(not(fuzzing))] |
| 62 | +fn main() {} |
64 | 63 |
|
65 | 64 | #[cfg(test)]
|
66 | 65 | mod tests {
|
67 |
| - fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) { |
68 |
| - let mut b = 0; |
69 |
| - for (idx, c) in hex.as_bytes().iter().enumerate() { |
70 |
| - b <<= 4; |
71 |
| - match *c { |
72 |
| - b'A'..=b'F' => b |= c - b'A' + 10, |
73 |
| - b'a'..=b'f' => b |= c - b'a' + 10, |
74 |
| - b'0'..=b'9' => b |= c - b'0', |
75 |
| - _ => panic!("Bad hex"), |
76 |
| - } |
77 |
| - if (idx & 1) == 1 { |
78 |
| - out.push(b); |
79 |
| - b = 0; |
80 |
| - } |
81 |
| - } |
82 |
| - } |
| 66 | + use base64::Engine; |
83 | 67 |
|
84 | 68 | #[test]
|
85 | 69 | fn duplicate_crash() {
|
86 |
| - let mut a = Vec::new(); |
87 |
| - extend_vec_from_hex("ffffff0000010080800000000000380000001adfc7040000000000000000000007fffffffffffffe1000000000000000000001555600000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff0300000000000000000000000000000000000000000000000000008000000000000000ffffffffffffff7f00000000000000ffffff151515111515155555555555d6eeffffff00", &mut a); |
88 |
| - super::do_test(&a); |
| 70 | + let data = base64::prelude::BASE64_STANDARD |
| 71 | + .decode("Cg==") |
| 72 | + .expect("base64 should be valid"); |
| 73 | + super::do_test(&data); |
89 | 74 | }
|
90 | 75 | }
|
0 commit comments