Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 480
implement fromstr trait to netaddress#2134
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| // This file is Copyright its original authors, visible in version control | ||
| // history. | ||
| // | ||
| // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE | ||
| // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. | ||
| // You may not use this file except in accordance with one or both of these | ||
| // licenses. | ||
| use lightning::util::base32; | ||
| use crate::utils::test_logger; | ||
| #[inline] | ||
| pub fn do_test(data: &[u8]) { | ||
| if let Ok(s) = std::str::from_utf8(data) { | ||
| let first_decoding = base32::Alphabet::RFC4648 { padding: true }.decode(s); | ||
jbesraa marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| if let Ok(first_decoding) = first_decoding { | ||
jbesraa marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| let encoding_response = base32::Alphabet::RFC4648 { padding: true }.encode(&first_decoding); | ||
| assert_eq!(encoding_response, s.to_ascii_uppercase()); | ||
| let second_decoding = base32::Alphabet::RFC4648 { padding: true }.decode(&encoding_response).unwrap(); | ||
| assert_eq!(first_decoding, second_decoding); | ||
| } | ||
| } | ||
jbesraa marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| if let Ok(s) = std::str::from_utf8(data) { | ||
| let first_decoding = base32::Alphabet::RFC4648 { padding: false }.decode(s); | ||
| if let Ok(first_decoding) = first_decoding { | ||
| let encoding_response = base32::Alphabet::RFC4648 { padding: false }.encode(&first_decoding); | ||
| assert_eq!(encoding_response, s.to_ascii_uppercase()); | ||
| let second_decoding = base32::Alphabet::RFC4648 { padding: false }.decode(&encoding_response).unwrap(); | ||
| assert_eq!(first_decoding, second_decoding); | ||
| } | ||
| } | ||
| let encode_response = base32::Alphabet::RFC4648 { padding: false }.encode(&data); | ||
jbesraa marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| let decode_response = base32::Alphabet::RFC4648 { padding: false }.decode(&encode_response).unwrap(); | ||
| assert_eq!(data, decode_response); | ||
| let encode_response = base32::Alphabet::RFC4648 { padding: true }.encode(&data); | ||
| let decode_response = base32::Alphabet::RFC4648 { padding: true }.decode(&encode_response).unwrap(); | ||
| assert_eq!(data, decode_response); | ||
| } | ||
| pub fn base32_test<Out: test_logger::Output>(data: &[u8], _out: Out) { | ||
| do_test(data); | ||
| } | ||
| #[no_mangle] | ||
| pub extern "C" fn base32_run(data: *const u8, datalen: usize) { | ||
| do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,113 @@ | ||
| // This file is Copyright its original authors, visible in version control | ||
| // history. | ||
| // | ||
| // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE | ||
| // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. | ||
| // You may not use this file except in accordance with one or both of these | ||
| // licenses. | ||
| // 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. | ||
| #![cfg_attr(feature = "libfuzzer_fuzz", no_main)] | ||
| #[cfg(not(fuzzing))] | ||
| compile_error!("Fuzz targets need cfg=fuzzing"); | ||
| extern crate lightning_fuzz; | ||
| use lightning_fuzz::base32::*; | ||
| #[cfg(feature = "afl")] | ||
| #[macro_use] extern crate afl; | ||
| #[cfg(feature = "afl")] | ||
| fn main() { | ||
| fuzz!(|data| { | ||
| base32_run(data.as_ptr(), data.len()); | ||
| }); | ||
| } | ||
| #[cfg(feature = "honggfuzz")] | ||
| #[macro_use] extern crate honggfuzz; | ||
| #[cfg(feature = "honggfuzz")] | ||
| fn main() { | ||
| loop { | ||
| fuzz!(|data| { | ||
| base32_run(data.as_ptr(), data.len()); | ||
| }); | ||
| } | ||
| } | ||
| #[cfg(feature = "libfuzzer_fuzz")] | ||
| #[macro_use] extern crate libfuzzer_sys; | ||
| #[cfg(feature = "libfuzzer_fuzz")] | ||
| fuzz_target!(|data: &[u8]| { | ||
| base32_run(data.as_ptr(), data.len()); | ||
| }); | ||
| #[cfg(feature = "stdin_fuzz")] | ||
| fn main() { | ||
| use std::io::Read; | ||
| let mut data = Vec::with_capacity(8192); | ||
| std::io::stdin().read_to_end(&mut data).unwrap(); | ||
| base32_run(data.as_ptr(), data.len()); | ||
| } | ||
| #[test] | ||
| fn run_test_cases() { | ||
| use std::fs; | ||
| use std::io::Read; | ||
| use lightning_fuzz::utils::test_logger::StringBuffer; | ||
| use std::sync::{atomic, Arc}; | ||
| { | ||
| let data: Vec<u8> = vec![0]; | ||
| base32_run(data.as_ptr(), data.len()); | ||
| } | ||
| let mut threads = Vec::new(); | ||
| let threads_running = Arc::new(atomic::AtomicUsize::new(0)); | ||
| if let Ok(tests) = fs::read_dir("test_cases/base32") { | ||
| for test in tests { | ||
| let mut data: Vec<u8> = Vec::new(); | ||
| let path = test.unwrap().path(); | ||
| fs::File::open(&path).unwrap().read_to_end(&mut data).unwrap(); | ||
| threads_running.fetch_add(1, atomic::Ordering::AcqRel); | ||
| let thread_count_ref = Arc::clone(&threads_running); | ||
| let main_thread_ref = std::thread::current(); | ||
| threads.push((path.file_name().unwrap().to_str().unwrap().to_string(), | ||
| std::thread::spawn(move || { | ||
| let string_logger = StringBuffer::new(); | ||
| let panic_logger = string_logger.clone(); | ||
| let res = if ::std::panic::catch_unwind(move || { | ||
| base32_test(&data, panic_logger); | ||
| }).is_err() { | ||
| Some(string_logger.into_string()) | ||
| } else { None }; | ||
| thread_count_ref.fetch_sub(1, atomic::Ordering::AcqRel); | ||
| main_thread_ref.unpark(); | ||
| res | ||
| }) | ||
| )); | ||
| while threads_running.load(atomic::Ordering::Acquire) > 32 { | ||
| std::thread::park(); | ||
| } | ||
| } | ||
| } | ||
| let mut failed_outputs = Vec::new(); | ||
| for (test, thread) in threads.drain(..) { | ||
| if let Some(output) = thread.join().unwrap() { | ||
| println!("\nOutput of {}:\n{}\n", test, output); | ||
| failed_outputs.push(test); | ||
| } | ||
| } | ||
| if !failed_outputs.is_empty() { | ||
| println!("Test cases which failed: "); | ||
| for case in failed_outputs { | ||
| println!("{}", case); | ||
| } | ||
| panic!(); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,113 @@ | ||
| // This file is Copyright its original authors, visible in version control | ||
| // history. | ||
| // | ||
| // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE | ||
| // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. | ||
| // You may not use this file except in accordance with one or both of these | ||
| // licenses. | ||
| // 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. | ||
| #![cfg_attr(feature = "libfuzzer_fuzz", no_main)] | ||
| #[cfg(not(fuzzing))] | ||
| compile_error!("Fuzz targets need cfg=fuzzing"); | ||
| extern crate lightning_fuzz; | ||
| use lightning_fuzz::fromstr_to_netaddress::*; | ||
| #[cfg(feature = "afl")] | ||
| #[macro_use] extern crate afl; | ||
| #[cfg(feature = "afl")] | ||
| fn main() { | ||
| fuzz!(|data| { | ||
| fromstr_to_netaddress_run(data.as_ptr(), data.len()); | ||
| }); | ||
| } | ||
| #[cfg(feature = "honggfuzz")] | ||
| #[macro_use] extern crate honggfuzz; | ||
| #[cfg(feature = "honggfuzz")] | ||
| fn main() { | ||
| loop { | ||
| fuzz!(|data| { | ||
| fromstr_to_netaddress_run(data.as_ptr(), data.len()); | ||
| }); | ||
| } | ||
| } | ||
| #[cfg(feature = "libfuzzer_fuzz")] | ||
| #[macro_use] extern crate libfuzzer_sys; | ||
| #[cfg(feature = "libfuzzer_fuzz")] | ||
| fuzz_target!(|data: &[u8]| { | ||
| fromstr_to_netaddress_run(data.as_ptr(), data.len()); | ||
| }); | ||
| #[cfg(feature = "stdin_fuzz")] | ||
| fn main() { | ||
| use std::io::Read; | ||
| let mut data = Vec::with_capacity(8192); | ||
| std::io::stdin().read_to_end(&mut data).unwrap(); | ||
| fromstr_to_netaddress_run(data.as_ptr(), data.len()); | ||
| } | ||
| #[test] | ||
| fn run_test_cases() { | ||
| use std::fs; | ||
| use std::io::Read; | ||
| use lightning_fuzz::utils::test_logger::StringBuffer; | ||
| use std::sync::{atomic, Arc}; | ||
| { | ||
| let data: Vec<u8> = vec![0]; | ||
| fromstr_to_netaddress_run(data.as_ptr(), data.len()); | ||
| } | ||
| let mut threads = Vec::new(); | ||
| let threads_running = Arc::new(atomic::AtomicUsize::new(0)); | ||
| if let Ok(tests) = fs::read_dir("test_cases/fromstr_to_netaddress") { | ||
| for test in tests { | ||
| let mut data: Vec<u8> = Vec::new(); | ||
| let path = test.unwrap().path(); | ||
| fs::File::open(&path).unwrap().read_to_end(&mut data).unwrap(); | ||
| threads_running.fetch_add(1, atomic::Ordering::AcqRel); | ||
| let thread_count_ref = Arc::clone(&threads_running); | ||
| let main_thread_ref = std::thread::current(); | ||
| threads.push((path.file_name().unwrap().to_str().unwrap().to_string(), | ||
| std::thread::spawn(move || { | ||
| let string_logger = StringBuffer::new(); | ||
| let panic_logger = string_logger.clone(); | ||
| let res = if ::std::panic::catch_unwind(move || { | ||
| fromstr_to_netaddress_test(&data, panic_logger); | ||
| }).is_err() { | ||
| Some(string_logger.into_string()) | ||
| } else { None }; | ||
| thread_count_ref.fetch_sub(1, atomic::Ordering::AcqRel); | ||
| main_thread_ref.unpark(); | ||
| res | ||
| }) | ||
| )); | ||
| while threads_running.load(atomic::Ordering::Acquire) > 32 { | ||
| std::thread::park(); | ||
| } | ||
| } | ||
| } | ||
| let mut failed_outputs = Vec::new(); | ||
| for (test, thread) in threads.drain(..) { | ||
| if let Some(output) = thread.join().unwrap() { | ||
| println!("\nOutput of {}:\n{}\n", test, output); | ||
| failed_outputs.push(test); | ||
| } | ||
| } | ||
| if !failed_outputs.is_empty() { | ||
| println!("Test cases which failed: "); | ||
| for case in failed_outputs { | ||
| println!("{}", case); | ||
| } | ||
| panic!(); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -21,6 +21,8 @@ GEN_TEST router | ||
| GEN_TEST zbase32 | ||
| GEN_TEST indexedmap | ||
| GEN_TEST onion_hop_data | ||
| GEN_TEST base32 | ||
jbesraa marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| GEN_TEST fromstr_to_netaddress | ||
| GEN_TEST msg_accept_channel msg_targets:: | ||
| GEN_TEST msg_announcement_signatures msg_targets:: | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| // This file is Copyright its original authors, visible in version control | ||
| // history. | ||
| // | ||
| // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE | ||
| // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. | ||
| // You may not use this file except in accordance with one or both of these | ||
| // licenses. | ||
| use lightning::ln::msgs::NetAddress; | ||
| use core::str::FromStr; | ||
| use crate::utils::test_logger; | ||
| #[inline] | ||
| pub fn do_test(data: &[u8]) { | ||
| if let Ok(s) = std::str::from_utf8(data) { | ||
| let _ = NetAddress::from_str(s); | ||
| } | ||
| } | ||
| pub fn fromstr_to_netaddress_test<Out: test_logger::Output>(data: &[u8], _out: Out) { | ||
| do_test(data); | ||
| } | ||
| #[no_mangle] | ||
| pub extern "C" fn fromstr_to_netaddress_run(data: *const u8, datalen: usize) { | ||
| do_test(unsafe { std::slice::from_raw_parts(data, datalen) }); | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.