From 402c267cf95aa9561f6b3934d320462494c9149f Mon Sep 17 00:00:00 2001 From: dishmaker <141624503+dishmaker@users.noreply.github.com> Date: Tue, 28 Oct 2025 14:52:01 +0100 Subject: [PATCH 1/3] der: track reader error position in ObjectIdentifier::decode_value --- der/src/asn1/oid.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/der/src/asn1/oid.rs b/der/src/asn1/oid.rs index cb8869afb..2f8ebe067 100644 --- a/der/src/asn1/oid.rs +++ b/der/src/asn1/oid.rs @@ -16,11 +16,16 @@ impl<'a, const MAX_SIZE: usize> DecodeValue<'a> for ObjectIdentifier { let mut buf = [0u8; MAX_SIZE]; let slice = buf .get_mut(..header.length().try_into()?) - .ok_or_else(|| Self::TAG.length_error())?; + .ok_or_else(|| reader.error(Self::TAG.length_error()))?; let actual_len = reader.read_into(slice)?.len(); debug_assert_eq!(actual_len, header.length().try_into()?); - Ok(ObjectIdentifierRef::from_bytes(slice)?.try_into()?) + + let oid_ref = ObjectIdentifierRef::from_bytes(slice) + .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?; + Ok(oid_ref + .try_into() + .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?) } } From 7374609b2c6f957fb560a7c12491dcee48f77445 Mon Sep 17 00:00:00 2001 From: dishmaker <141624503+dishmaker@users.noreply.github.com> Date: Tue, 28 Oct 2025 14:58:10 +0100 Subject: [PATCH 2/3] der: cargo clippy change --- der/src/asn1/oid.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/der/src/asn1/oid.rs b/der/src/asn1/oid.rs index 2f8ebe067..b153301e7 100644 --- a/der/src/asn1/oid.rs +++ b/der/src/asn1/oid.rs @@ -23,9 +23,10 @@ impl<'a, const MAX_SIZE: usize> DecodeValue<'a> for ObjectIdentifier { let oid_ref = ObjectIdentifierRef::from_bytes(slice) .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?; - Ok(oid_ref + let oid = oid_ref .try_into() - .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?) + .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?; + Ok(oid) } } From d990ce0ba177bc4818bb2968776568ea64d364a0 Mon Sep 17 00:00:00 2001 From: dishmaker <141624503+dishmaker@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:01:27 +0100 Subject: [PATCH 3/3] der: consolidate ObjectIdentifierRef `.and_then(TryInto::try_into)` --- der/src/asn1/oid.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/der/src/asn1/oid.rs b/der/src/asn1/oid.rs index b153301e7..86b8fbcf3 100644 --- a/der/src/asn1/oid.rs +++ b/der/src/asn1/oid.rs @@ -21,12 +21,9 @@ impl<'a, const MAX_SIZE: usize> DecodeValue<'a> for ObjectIdentifier { let actual_len = reader.read_into(slice)?.len(); debug_assert_eq!(actual_len, header.length().try_into()?); - let oid_ref = ObjectIdentifierRef::from_bytes(slice) - .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?; - let oid = oid_ref - .try_into() - .map_err(|oid_err| reader.error(Error::from(oid_err).kind()))?; - Ok(oid) + ObjectIdentifierRef::from_bytes(slice) + .and_then(TryInto::try_into) + .map_err(|oid_err| reader.error(Error::from(oid_err).kind())) } }