58 lines
1.9 KiB
Rust
58 lines
1.9 KiB
Rust
#[macro_use]
|
|
extern crate afl;
|
|
extern crate xmpp_proxy;
|
|
|
|
use std::io;
|
|
use std::io::Cursor;
|
|
|
|
use tokio::runtime::Runtime;
|
|
|
|
use xmpp_proxy::{StanzaFilter, StanzaReader};
|
|
|
|
fn main_gen_test_cases() {
|
|
fuzz!(|data: &[u8]| {
|
|
let rt = Runtime::new().unwrap();
|
|
|
|
rt.block_on(async {
|
|
let mut filter = StanzaFilter::new(262_144);
|
|
let mut stanza_reader = StanzaReader(Cursor::new(data));
|
|
while let Ok(Some(stanza)) = stanza_reader.next(&mut filter).await {
|
|
use rxml::EventRead;
|
|
let mut fp = rxml::FeedParser::new();
|
|
let stanza_vec = &stanza.to_vec();
|
|
fp.feed(stanza_vec);
|
|
fp.feed_eof();
|
|
let result = fp.read_all_eof(|_ev| {
|
|
//println!("got event: {:?}", ev);
|
|
});
|
|
// true indicates eof
|
|
if let Ok(result) = result {
|
|
if result {
|
|
// wow, afl generated us valid XML, lets output it as a test case
|
|
let fname = sha256::digest_bytes(&stanza);
|
|
std::fs::create_dir_all("/tmp/afl_test_gen/").unwrap();
|
|
std::fs::write("/tmp/afl_test_gen/".to_owned() + &fname, &stanza).unwrap();
|
|
} else {
|
|
// more data is required, stanzafilter should never let this happen, let's panic
|
|
panic!("more data required?");
|
|
}
|
|
}
|
|
}
|
|
})
|
|
});
|
|
}
|
|
|
|
fn main() {
|
|
fuzz!(|data: &[u8]| {
|
|
let rt = Runtime::new().unwrap();
|
|
|
|
rt.block_on(async {
|
|
let mut filter = StanzaFilter::new(262_144);
|
|
let mut stanza_reader = StanzaReader(Cursor::new(data));
|
|
while let Ok(Some(_stanza)) = stanza_reader.next(&mut filter).await {
|
|
//ret.push(to_str(stanza).to_string());
|
|
}
|
|
})
|
|
});
|
|
}
|