Toggle diff (242 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 7e5fb2948e..3c7f27a3d3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2133,6 +2133,9 @@ dist_patch_DATA = \
%D%/packages/patches/rust-ndarray-0.13-remove-blas-src.patch \
%D%/packages/patches/rust-ndarray-0.14-remove-blas-src.patch \
%D%/packages/patches/rust-nettle-disable-vendor.patch \
+ %D%/packages/patches/rust-onenote-parser-for-clamav-deps.patch \
+ %D%/packages/patches/rust-onenote-parser-for-clamav-parse-in-memory-buffer.patch \
+ %D%/packages/patches/rust-onenote-parser-for-clamav-property-type.patch \
%D%/packages/patches/rust-poem-1-fewer-deps.patch \
%D%/packages/patches/rust-rspec-1-remove-clippy.patch \
%D%/packages/patches/rust-trash-2-update-windows.patch \
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index d3815e7f28..2a66385d10 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -49347,6 +49347,33 @@ (define-public rust-onenote-parser-0.3
"This package provides a parser for Microsoft OneNote files.")
(license license:mpl2.0)))
+(define-public rust-onenote-parser-for-clamav
+ (package
+ (inherit rust-onenote-parser-0.3)
+ (name "rust-onenote-parser-for-clamav")
+ (source (origin
+ (inherit (package-source rust-onenote-parser-0.3))
+ (patches
+ (search-patches
+ "rust-onenote-parser-for-clamav-deps.patch"
+ "rust-onenote-parser-for-clamav-parse-in-memory-buffer.patch"
+ "rust-onenote-parser-for-clamav-property-type.patch"))
+ (snippet #~(begin
+ (delete-file "Cargo.toml")
+ (rename-file "Cargo.toml.orig" "Cargo.toml")))))
+ (arguments
+ `(#:cargo-inputs
+ (("rust-bytes" ,rust-bytes-1)
+ ("rust-encoding-rs" ,rust-encoding-rs-0.8)
+ ("rust-enum-primitive-derive" ,rust-enum-primitive-derive-0.2)
+ ("rust-itertools" ,rust-itertools-0.10)
+ ("rust-num-traits" ,rust-num-traits-0.2)
+ ("rust-paste" ,rust-paste-1)
+ ("rust-thiserror" ,rust-thiserror-1)
+ ("rust-uuid" ,rust-uuid-1)
+ ("rust-widestring" ,rust-widestring-1))
+ #:cargo-development-inputs (("rust-insta" ,rust-insta-1))))))
+
(define-public rust-onig-6
(package
(name "rust-onig")
diff --git a/gnu/packages/patches/rust-onenote-parser-for-clamav-deps.patch b/gnu/packages/patches/rust-onenote-parser-for-clamav-deps.patch
new file mode 100644
index 0000000000..24d5692573
--- /dev/null
+++ b/gnu/packages/patches/rust-onenote-parser-for-clamav-deps.patch
@@ -0,0 +1,88 @@
+From f940d8c8fa087554583158d50df071af89c516db Mon Sep 17 00:00:00 2001
+From: Simon Lamon <32477463+silamon@users.noreply.github.com>
+Date: Sat, 19 Nov 2022 20:32:07 +0100
+Subject: [PATCH] chore: upgrade dependencies (#9)
+
+Co-authored-by: Markus Siemens <markus@m-siemens.de>
+---
+ Cargo.toml.orig | 8 ++++----
+ src/errors.rs | 6 +++---
+ src/reader.rs | 2 +-
+ src/utils.rs | 5 ++---
+ 4 files changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/Cargo.toml.orig b/Cargo.toml.orig
+index 9afddd0..e302436 100644
+--- a/Cargo.toml.orig
++++ b/Cargo.toml.orig
+@@ -14,15 +14,15 @@ categories = ["parser-implementations"]
+ backtrace = []
+
+ [dependencies]
+-bytes = "0.5"
++bytes = "1.2.0"
+ encoding_rs = "0.8.31"
+ enum-primitive-derive = "0.2.2"
+-itertools = "0.9.0"
++itertools = "0.10.3"
+ num-traits = "0.2"
+ paste = "1.0"
+ thiserror = "1.0"
+-uuid = "0.8"
+-widestring = "0.4.3"
++uuid = "1.1.2"
++widestring = "1.0.2"
+
+ [dev-dependencies]
+ insta = "1.21.1"
+diff --git a/src/errors.rs b/src/errors.rs
+index 91477b3..50079a3 100644
+--- a/src/errors.rs
++++ b/src/errors.rs
+@@ -51,8 +51,8 @@ impl From<std::string::FromUtf16Error> for Error {
+ }
+ }
+
+-impl From<widestring::MissingNulError<u16>> for Error {
+- fn from(err: widestring::MissingNulError<u16>) -> Self {
++impl From<widestring::error::MissingNulTerminator> for Error {
++ fn from(err: widestring::error::MissingNulTerminator) -> Self {
+ ErrorKind::from(err).into()
+ }
+ }
+@@ -128,6 +128,6 @@ pub enum ErrorKind {
+ #[error("UTF-16 string is missing null terminator: {err}")]
+ Utf16MissingNull {
+ #[from]
+- err: widestring::MissingNulError<u16>,
++ err: widestring::error::MissingNulTerminator,
+ },
+ }
+diff --git a/src/reader.rs b/src/reader.rs
+index 64730d0..318c280 100644
+--- a/src/reader.rs
++++ b/src/reader.rs
+@@ -40,7 +40,7 @@ impl<'a> Reader<'a> {
+ }
+
+ pub(crate) fn bytes(&self) -> &[u8] {
+- self.0.bytes()
++ self.0.chunk()
+ }
+
+ pub(crate) fn remaining(&self) -> usize {
+diff --git a/src/utils.rs b/src/utils.rs
+index fd77181..074ff50 100644
+--- a/src/utils.rs
++++ b/src/utils.rs
+@@ -12,8 +12,7 @@ impl Utf16ToString for &[u8] {
+ .map(|v| u16::from_le_bytes([v[0], v[1]]))
+ .collect();
+
+- let value = U16CString::from_vec_with_nul(data)?;
+-
+- Ok(value.to_string()?)
++ let value = U16CString::from_vec_truncate(data);
++ Ok(value.to_string().unwrap())
+ }
+ }
diff --git a/gnu/packages/patches/rust-onenote-parser-for-clamav-parse-in-memory-buffer.patch b/gnu/packages/patches/rust-onenote-parser-for-clamav-parse-in-memory-buffer.patch
new file mode 100644
index 0000000000..77adc550ca
--- /dev/null
+++ b/gnu/packages/patches/rust-onenote-parser-for-clamav-parse-in-memory-buffer.patch
@@ -0,0 +1,52 @@
+From 8b450447e58143004b68dd21c11b710fdb79be92 Mon Sep 17 00:00:00 2001
+From: Micah Snyder <micasnyd@cisco.com>
+Date: Mon, 3 Jul 2023 21:44:57 -0700
+Subject: [PATCH] Add ability to parse section from in memory buffer
+
+Resolves: https://github.com/msiemens/onenote.rs/issues/12
+---
+ src/onenote/mod.rs | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/src/onenote/mod.rs b/src/onenote/mod.rs
+index de172c9..8bcb62b 100644
+--- a/src/onenote/mod.rs
++++ b/src/onenote/mod.rs
+@@ -6,8 +6,9 @@ use crate::onestore::parse_store;
+ use crate::reader::Reader;
+ use std::ffi::OsStr;
+ use std::fs::File;
+-use std::io::{BufReader, Read};
++use std::io::{BufReader, Read, Cursor};
+ use std::path::Path;
++use std::str::FromStr;
+
+ pub(crate) mod content;
+ pub(crate) mod embedded_file;
+@@ -76,6 +77,26 @@ impl Parser {
+ Ok(Notebook { entries: sections })
+ }
+
++ /// Parse a OneNote section buffer.
++ ///
++ /// The `data` argument must contain a OneNote section.
++ pub fn parse_section_buffer(&mut self, data: &[u8], file_name: &Path) -> Result<Section> {
++ let packaging = OneStorePackaging::parse(&mut Reader::new(data))?;
++ let store = parse_store(&packaging)?;
++
++ if store.schema_guid() != guid!({1F937CB4-B26F-445F-B9F8-17E20160E461}) {
++ return Err(ErrorKind::NotASectionFile {
++ file: file_name.to_string_lossy().into_owned(),
++ }
++ .into());
++ }
++
++ section::parse_section(
++ store,
++ file_name.to_string_lossy().into_owned(),
++ )
++ }
++
+ /// Parse a OneNote section file.
+ ///
+ /// The `path` argument must point to a `.one` file that contains a
diff --git a/gnu/packages/patches/rust-onenote-parser-for-clamav-property-type.patch b/gnu/packages/patches/rust-onenote-parser-for-clamav-property-type.patch
new file mode 100644
index 0000000000..ff94fa2630
--- /dev/null
+++ b/gnu/packages/patches/rust-onenote-parser-for-clamav-property-type.patch
@@ -0,0 +1,30 @@
+From 29c08532252b917543ff268284f926f30876bb79 Mon Sep 17 00:00:00 2001
+From: Matt Jolly <Matt.Jolly@footclan.ninja>
+Date: Mon, 24 Jun 2024 17:34:05 +1000
+Subject: [PATCH] PropertType: Specify type for custom discriminant values
+
+We use custom discriminant values for enum variants for "PropertType" without specifying the type.
+This causes it to default to "isize" which on 64bit platforms is big enough to hold the 32bit constants,
+but causes overflow when isize is 32bit.
+
+This issue was uncovered due to build failures on arm for Gentoo Linux as a dependency of ClamAV.
+
+Bug: https://bugs.gentoo.org/927214
+Signed-off-by: Matt Jolly <kangie@gentoo.org>
+Co-authored-by: Steven Newbury <steve@snewbury.org.uk>
+---
+ src/one/property/mod.rs | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/one/property/mod.rs b/src/one/property/mod.rs
+index 42841c6..fcc0481 100644
+--- a/src/one/property/mod.rs
++++ b/src/one/property/mod.rs
+@@ -23,6 +23,7 @@ mod references;
+ pub(crate) mod simple;
+ pub(crate) mod time;
+
++#[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq)]
+ #[allow(dead_code)]
+ #[allow(clippy::enum_clike_unportable_variant)]
--
2.46.0