diff --git a/src/utils/fs.rs b/src/utils/fs.rs index 1d5790f..d33411a 100644 --- a/src/utils/fs.rs +++ b/src/utils/fs.rs @@ -98,6 +98,9 @@ pub fn try_infer_extension(path: &Path) -> Option { buf.starts_with(&[0x28, 0xB5, 0x2F, 0xFD]) } fn is_rar(buf: &[u8]) -> bool { + // ref https://www.rarlab.com/technote.htm#rarsign + // RAR 5.0 8 bytes length signature: 0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00 + // RAR 4.x 7 bytes length signature: 0x52 0x61 0x72 0x21 0x1A 0x07 0x00 buf.len() >= 7 && buf.starts_with(&[0x52, 0x61, 0x72, 0x21, 0x1A, 0x07]) && (buf[6] == 0x00 || (buf.len() >= 8 && buf[6..=7] == [0x01, 0x00]))