From 930c805127cada70e4e4ab03c7680214b5c2a4f5 Mon Sep 17 00:00:00 2001 From: Andrew Hickman Date: Wed, 8 Feb 2023 14:09:29 +0000 Subject: [PATCH] fix: MetadataKey::from_bytes returns an error (#1246) BREAKING: `Metadata::from_bytes` returns an error now --- tonic/src/metadata/key.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tonic/src/metadata/key.rs b/tonic/src/metadata/key.rs index a5a1248..e40660d 100644 --- a/tonic/src/metadata/key.rs +++ b/tonic/src/metadata/key.rs @@ -42,7 +42,7 @@ impl MetadataKey { match HeaderName::from_bytes(src) { Ok(name) => { if !VE::is_valid_key(name.as_str()) { - panic!("invalid metadata key") + return Err(InvalidMetadataKey::new()); } Ok(MetadataKey { @@ -282,3 +282,30 @@ impl Default for InvalidMetadataKey { } impl Error for InvalidMetadataKey {} + +#[cfg(test)] +mod tests { + use super::{AsciiMetadataKey, BinaryMetadataKey}; + + #[test] + fn test_from_bytes_binary() { + assert!(BinaryMetadataKey::from_bytes(b"").is_err()); + assert!(BinaryMetadataKey::from_bytes(b"\xFF").is_err()); + assert!(BinaryMetadataKey::from_bytes(b"abc").is_err()); + assert_eq!( + BinaryMetadataKey::from_bytes(b"abc-bin").unwrap().as_str(), + "abc-bin" + ); + } + + #[test] + fn test_from_bytes_ascii() { + assert!(AsciiMetadataKey::from_bytes(b"").is_err()); + assert!(AsciiMetadataKey::from_bytes(b"\xFF").is_err()); + assert_eq!( + AsciiMetadataKey::from_bytes(b"abc").unwrap().as_str(), + "abc" + ); + assert!(AsciiMetadataKey::from_bytes(b"abc-bin").is_err()); + } +}