use std::os::raw::{c_char, c_int};
use std::ptr;
use proptest::prelude::*;
fn drive_xml(data: &[u8]) {
let mut buf = Vec::with_capacity(data.len() + 1);
buf.extend_from_slice(data);
buf.push(0);
let doc = unsafe {
crate::abi::exports_xml2::xmlReadMemory(
buf.as_ptr() as *const c_char,
data.len() as c_int,
ptr::null(),
ptr::null(),
0,
)
};
if !doc.is_null() {
unsafe { crate::abi::exports_xml2::xmlFreeDoc(doc) };
}
}
fn drive_html(data: &[u8]) {
let mut buf = Vec::with_capacity(data.len() + 1);
buf.extend_from_slice(data);
buf.push(0);
let doc = unsafe {
crate::abi::exports_html::htmlReadMemory(
buf.as_ptr() as *const c_char,
data.len() as c_int,
ptr::null(),
ptr::null(),
0,
)
};
if !doc.is_null() {
unsafe { crate::abi::exports_xml2::xmlFreeDoc(doc) };
}
}
proptest! {
#![proptest_config(ProptestConfig {
cases: 2000,
..ProptestConfig::default()
})]
#[test]
fn fuzz_xml_read_memory_no_panic(data in proptest::collection::vec(any::<u8>(), 0..4096)) {
drive_xml(&data);
}
#[test]
fn fuzz_html_read_memory_no_panic(data in proptest::collection::vec(any::<u8>(), 0..4096)) {
drive_html(&data);
}
}