From 2e1bdd33be96b839e79dc809d816a88cb79d5b47 Mon Sep 17 00:00:00 2001 From: Romain Gallet Date: Tue, 10 Dec 2024 18:12:59 +0100 Subject: [PATCH 1/4] Par2 - added support --- README.md | 1 + src/map.rs | 6 ++++++ src/matchers/archive.rs | 12 ++++++++++++ tests/archive.rs | 1 + 4 files changed, 20 insertions(+) diff --git a/README.md b/README.md index cea0d80..2a1d91a 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,7 @@ assert_eq!(kind.extension(), "foo"); - **zst** - `application/zstd` - **msi** - `application/x-ole-storage` - **cpio** - `application/x-cpio` +- **par2** - `application/x-par2` #### Book diff --git a/src/map.rs b/src/map.rs index cd0b9ad..ebf1428 100644 --- a/src/map.rs +++ b/src/map.rs @@ -443,6 +443,12 @@ matcher_map!( "application/x-tar", "tar", matchers::archive::is_tar + ), + ( + MatcherType::Archive, + "application/x-par2", + "par2", + matchers::archive::is_par2 ), ( MatcherType::Archive, diff --git a/src/matchers/archive.rs b/src/matchers/archive.rs index ff03ca3..02906d6 100644 --- a/src/matchers/archive.rs +++ b/src/matchers/archive.rs @@ -35,6 +35,18 @@ pub fn is_tar(buf: &[u8]) -> bool { && buf[261] == 0x72 } +pub fn is_par2(buf: &[u8]) -> bool { + buf.len() > 8 + && buf[0] == 0x50 + && buf[1] == 0x41 + && buf[2] == 0x52 + && buf[3] == 0x32 + && buf[4] == 0x00 + && buf[5] == 0x50 + && buf[6] == 0x4B + && buf[7] == 0x54 +} + /// Returns whether a buffer is a RAR archive. pub fn is_rar(buf: &[u8]) -> bool { buf.len() > 6 diff --git a/tests/archive.rs b/tests/archive.rs index 6c34ee5..28bef76 100644 --- a/tests/archive.rs +++ b/tests/archive.rs @@ -17,3 +17,4 @@ test_format!( zst_skip, "sample.skippable.zst" ); +test_format!(Archive, "application/x-par2", "par2", par2, "sample.par2"); From d2f3e2f910597413790246812cc8d47597b5033f Mon Sep 17 00:00:00 2001 From: Romain Gallet Date: Tue, 10 Dec 2024 18:15:18 +0100 Subject: [PATCH 2/4] Par2 - added support --- src/map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.rs b/src/map.rs index ebf1428..8797cbe 100644 --- a/src/map.rs +++ b/src/map.rs @@ -444,7 +444,7 @@ matcher_map!( "tar", matchers::archive::is_tar ), - ( + ( MatcherType::Archive, "application/x-par2", "par2", From 2fcb251fad9ca5e9ab622da3bffed51c316c18a4 Mon Sep 17 00:00:00 2001 From: Romain Gallet Date: Tue, 10 Dec 2024 18:19:25 +0100 Subject: [PATCH 3/4] Par2 - added support --- src/matchers/doc.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/matchers/doc.rs b/src/matchers/doc.rs index 71c3a03..bd32231 100644 --- a/src/matchers/doc.rs +++ b/src/matchers/doc.rs @@ -131,11 +131,11 @@ fn ole2(buf: &[u8]) -> Option { } fn check_msooml(buf: &[u8], offset: usize) -> Option { - if compare_bytes(buf, &[b'w', b'o', b'r', b'd', b'/'], offset) { + if compare_bytes(buf, b"word/", offset) { Some(DocType::DOCX) - } else if compare_bytes(buf, &[b'p', b'p', b't', b'/'], offset) { + } else if compare_bytes(buf, b"ppt/", offset) { Some(DocType::PPTX) - } else if compare_bytes(buf, &[b'x', b'l', b'/'], offset) { + } else if compare_bytes(buf, b"xl/", offset) { Some(DocType::XLSX) } else { None From 4b58ab65d6a7bd85a20a2465843982125ebf7966 Mon Sep 17 00:00:00 2001 From: Romain Gallet Date: Tue, 10 Dec 2024 18:29:37 +0100 Subject: [PATCH 4/4] Par2 - added support --- testdata/sample.par2 | Bin 0 -> 24 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 testdata/sample.par2 diff --git a/testdata/sample.par2 b/testdata/sample.par2 new file mode 100644 index 0000000000000000000000000000000000000000..8dded037998bba953dad0c41a20aa0f885962da2 GIT binary patch literal 24 acmWG=3^HN}@D5qR00A4gjN5r4R9XN(J_RWN literal 0 HcmV?d00001