use {
memmap::Mmap,
phf::{phf_set, Set},
};
pub const MIN_FILE_SIZE: usize = 100;
static SIGNATURES_4: Set<[u8; 4]> = phf_set! {
[ 0x50, 0x4B, 0x03, 0x04 ], [ 0x50, 0x4B, 0x05, 0x06 ], [ 0x50, 0x4B, 0x07, 0x08 ], [ 0xED, 0xAB, 0xEE, 0xDB ], [ 0x49, 0x49, 0x2A, 0x00 ], [ 0x4D, 0x4D, 0x00, 0x2A ], [ 0x7F, 0x45, 0x4C, 0x46 ], [ 0xCA, 0xFE, 0xBA, 0xBE ], [ 0x25, 0x21, 0x50, 0x53 ], [ 0x4F, 0x67, 0x67, 0x53 ], [ 0x38, 0x42, 0x50, 0x53 ], [ 0x57, 0x41, 0x56, 0x45 ], [ 0x41, 0x56, 0x49, 0x20 ], [ 0x4D, 0x54, 0x68, 0x64 ], [ 0xD0, 0xCF, 0x11, 0xE0 ], [ 0x43, 0x72, 0x32, 0x34 ], [ 0x78, 0x61, 0x72, 0x21 ], [ 0x75, 0x73, 0x74, 0x61 ], [ 0x37, 0x7A, 0xBC, 0xAF ], [ 0x4D, 0x53, 0x43, 0x46 ], [ 0x52, 0x49, 0x46, 0x46 ], [ 0x47, 0x49, 0x46, 0x38 ], [ 0x4C, 0x5A, 0x49, 0x50 ], [ 0xCE, 0xFA, 0xED, 0xFE ], [ 0xCF, 0xFA, 0xED, 0xFE ], [ 0x46, 0x4C, 0x49, 0x46 ], [ 0x62, 0x76, 0x78, 0x32 ], };
pub fn is_known_binary(hay: &Mmap) -> bool {
if hay.len() < MIN_FILE_SIZE {
return false;
}
let c = unsafe { *hay.get_unchecked(0) };
if c < 9 || (c > 13 && c < 32) || c >= 254 {
return true;
}
if SIGNATURES_4.contains(&hay[0..4]) {
return true;
}
false
}