From c82015f6cf02ec139cf91b7bb898f5f5d5d5d2cc Mon Sep 17 00:00:00 2001 From: Gwen Lg Date: Thu, 29 Jan 2026 22:00:29 +0100 Subject: [PATCH] chore: update nom dependency to 0.8 update syntax with : - add explicit call of `parse` method - add ref slice management for `tag` fn --- Cargo.lock | 11 ++--------- Cargo.toml | 2 +- src/api/common/signature/streaming.rs | 23 +++++++++++++---------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7cbde35a..2eff66aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3000,12 +3000,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -3078,12 +3072,11 @@ checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" [[package]] name = "nom" -version = "7.1.3" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", - "minimal-lexical", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 53421bdc..933f731f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,7 +62,7 @@ lazy_static = "1.5" md-5 = "0.10" mktemp = "0.5" nix = { version = "0.31", default-features = false, features = ["fs"] } -nom = "7.1" +nom = "8.0" parking_lot = "0.12" parse_duration = "2.1" paste = "1.0" diff --git a/src/api/common/signature/streaming.rs b/src/api/common/signature/streaming.rs index 06b551eb..e7af587c 100644 --- a/src/api/common/signature/streaming.rs +++ b/src/api/common/signature/streaming.rs @@ -201,6 +201,7 @@ mod payload { use nom::character::streaming::hex_digit1; use nom::combinator::{map_res, opt}; use nom::number::streaming::hex_u32; + use nom::Parser as _; macro_rules! try_parse { ($expr:expr) => { @@ -234,7 +235,7 @@ mod payload { let (input, _) = try_parse!(tag(";")(input)); let (input, _) = try_parse!(tag("chunk-signature=")(input)); - let (input, data) = try_parse!(map_res(hex_digit1, hex::decode)(input)); + let (input, data) = try_parse!(map_res(hex_digit1, hex::decode).parse(input)); let signature = Hash::try_from(&data).ok_or(nom::Err::Failure(Error::BadSignature))?; let (input, _) = try_parse!(tag("\r\n")(input)); @@ -272,18 +273,20 @@ mod payload { let (input, header_name) = try_parse!(map_res( take_while(|c: u8| c.is_ascii_alphanumeric() || c == b'-'), HeaderName::from_bytes - )(input)); - let (input, _) = try_parse!(tag(b":")(input)); + ) + .parse(input)); + let (input, _) = try_parse!(tag(&b":"[..])(input)); let (input, header_value) = try_parse!(map_res( take_while(|c: u8| c.is_ascii_alphanumeric() || b"+/=".contains(&c)), HeaderValue::from_bytes - )(input)); + ) + .parse(input)); // Possible '\n' after the header value, depends on clients // https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html - let (input, _) = try_parse!(opt(tag(b"\n"))(input)); + let (input, _) = try_parse!(opt(tag(&b"\n"[..])).parse(input)); - let (input, _) = try_parse!(tag(b"\r\n")(input)); + let (input, _) = try_parse!(tag(&b"\r\n"[..]).parse(input)); Ok(( input, @@ -297,10 +300,10 @@ mod payload { pub fn parse_signed(input: &[u8]) -> nom::IResult<&[u8], Self, Error<&[u8]>> { let (input, trailer) = Self::parse_content(input)?; - let (input, _) = try_parse!(tag(b"x-amz-trailer-signature:")(input)); - let (input, data) = try_parse!(map_res(hex_digit1, hex::decode)(input)); + let (input, _) = try_parse!(tag(&b"x-amz-trailer-signature:"[..]).parse(input)); + let (input, data) = try_parse!(map_res(hex_digit1, hex::decode).parse(input)); let signature = Hash::try_from(&data).ok_or(nom::Err::Failure(Error::BadSignature))?; - let (input, _) = try_parse!(tag(b"\r\n")(input)); + let (input, _) = try_parse!(tag(&b"\r\n"[..]).parse(input)); Ok(( input, @@ -312,7 +315,7 @@ mod payload { } pub fn parse_unsigned(input: &[u8]) -> nom::IResult<&[u8], Self, Error<&[u8]>> { let (input, trailer) = Self::parse_content(input)?; - let (input, _) = try_parse!(tag(b"\r\n")(input)); + let (input, _) = try_parse!(tag(&b"\r\n"[..]).parse(input)); Ok((input, trailer)) }