From c77dc464e27274e5830dbc31544ab111901ec465 Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Thu, 28 Mar 2024 00:08:16 +0100 Subject: [PATCH] fix: advance RLP decoding buffer --- src/keys/combined.rs | 4 +--- src/lib.rs | 11 ++++++++--- src/node_id.rs | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/keys/combined.rs b/src/keys/combined.rs index 8d858de..f382289 100644 --- a/src/keys/combined.rs +++ b/src/keys/combined.rs @@ -4,14 +4,12 @@ //! Currently only `secp256k1` and `ed25519` key types are supported. use super::{ed25519_dalek as ed25519, EnrKey, EnrPublicKey, SigningError}; +use crate::Key; use alloy_rlp::Error as DecoderError; use bytes::Bytes; -pub use k256; use std::{collections::BTreeMap, convert::TryFrom}; use zeroize::Zeroize; -use crate::Key; - /// A standard implementation of the `EnrKey` trait used to sign and modify ENR records. The variants here represent the currently /// supported in-built signing schemes. pub enum CombinedKey { diff --git a/src/lib.rs b/src/lib.rs index 8badae7..d088468 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1080,6 +1080,10 @@ impl Decodable for Enr { if !enr.verify() { return Err(DecoderError::Custom("Invalid Signature")); } + + // advance the buffer + *buf = payload; + Ok(enr) } } @@ -1149,7 +1153,6 @@ fn check_spec_reserved_keys(key: &[u8], mut value: &[u8]) -> Result<(), Error> { mod tests { use super::*; use std::convert::TryFrom; - use std::net::Ipv4Addr; type DefaultEnr = Enr; @@ -1162,7 +1165,9 @@ mod tests { hex::decode("03ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd3138") .unwrap(); - let enr = DefaultEnr::decode(&mut valid_record.as_slice()).unwrap(); + let mut buf = valid_record.as_slice(); + let enr = DefaultEnr::decode(&mut buf).unwrap(); + assert!(buf.is_empty()); let pubkey = enr.public_key().encode(); @@ -1764,7 +1769,7 @@ mod tests { let mut huge_enr = Enr::empty(&key).unwrap(); let large_vec: Vec = std::iter::repeat(0).take(MAX_ENR_SIZE).collect(); - let large_vec_encoded = alloy_rlp::encode(&large_vec); + let large_vec_encoded = alloy_rlp::encode(large_vec); huge_enr .content diff --git a/src/node_id.rs b/src/node_id.rs index 7e3b5f8..192206e 100644 --- a/src/node_id.rs +++ b/src/node_id.rs @@ -170,7 +170,7 @@ mod tests { #[test] fn test_serde_value() { let node = NodeId::random(); - let value = serde_json::to_value(&node).unwrap(); + let value = serde_json::to_value(node).unwrap(); assert_eq!(node, serde_json::from_value::(value).unwrap()); }