blob: 6d9f5d5c7e7e0d98fd6db5fe5455cd6ca2a21d02 [file] [log] [blame]
extern crate miniz_oxide;
use std::io::Read;
use miniz_oxide::inflate::{TINFLStatus, decompress_to_vec_zlib, decompress_to_vec};
use miniz_oxide::deflate::compress_to_vec;
fn get_test_file_data(name: &str) -> Vec<u8> {
use std::fs::File;
let mut input = Vec::new();
let mut f = File::open(name).unwrap();
f.read_to_end(&mut input).unwrap();
input
}
/// Fuzzed file that caused issues for the inflate library.
#[test]
fn inf_issue_14() {
let data = get_test_file_data("tests/test_data/issue_14.zlib");
let result = decompress_to_vec_zlib(data.as_slice());
assert!(result.is_err());
let error = result.unwrap_err();
assert_eq!(error, TINFLStatus::Failed);
}
/// Fuzzed file that causes panics (subtract-with-overflow in debug, out-of-bounds in release)
#[test]
fn inf_issue_19() {
let data = get_test_file_data("tests/test_data/issue_19.deflate");
let _ = decompress_to_vec(data.as_slice());
}
/// Fuzzed (invalid )file that resulted in an infinite loop as inflate read a code as having 0
/// length.
#[test]
fn decompress_zero_code_len_oom() {
let data = get_test_file_data("tests/test_data/invalid_code_len_oom");
let _ = decompress_to_vec(data.as_slice());
}
/// Same problem as previous test but in the end of input huffman decode part of
/// `decode_huffman_code`
#[test]
fn decompress_zero_code_len_2() {
let data = get_test_file_data("tests/test_data/invalid_code_len_oom");
let _ = decompress_to_vec(data.as_slice());
}
fn get_test_data() -> Vec<u8> {
use std::env;
let path = env::var("TEST_FILE").unwrap_or_else(|_| "../miniz/miniz.c".to_string());
get_test_file_data(&path)
}
fn roundtrip(level: u8) {
let data = get_test_data();
let enc = compress_to_vec(&data.as_slice()[..], level);
println!(
"Input len: {}, compressed len: {}, level: {}",
data.len(),
enc.len(),
level
);
let dec = decompress_to_vec(enc.as_slice()).unwrap();
assert!(data == dec);
}
#[test]
fn roundtrip_lvl_9() {
roundtrip(9);
}
#[test]
fn roundtrip_lvl_1() {
roundtrip(1);
}
#[test]
fn roundtrip_lvl_0() {
roundtrip(0);
}