From 3b23c2e86d09a8a8b8cd99dfa02390177498e6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Sun, 3 Feb 2019 12:26:25 +0100 Subject: [PATCH] Additional tests for uint deserialization. (#10279) --- rpc/src/v1/types/bytes.rs | 4 +++- rpc/src/v1/types/hash.rs | 2 +- rpc/src/v1/types/uint.rs | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/rpc/src/v1/types/bytes.rs b/rpc/src/v1/types/bytes.rs index 12edd76bc..837f3b5f9 100644 --- a/rpc/src/v1/types/bytes.rs +++ b/rpc/src/v1/types/bytes.rs @@ -74,7 +74,7 @@ impl<'a> Visitor<'a> for BytesVisitor { } fn visit_str(self, value: &str) -> Result where E: Error { - if value.len() >= 2 && &value[0..2] == "0x" && value.len() & 1 == 0 { + if value.len() >= 2 && value.starts_with("0x") && value.len() & 1 == 0 { Ok(Bytes::new(FromHex::from_hex(&value[2..]).map_err(|e| Error::custom(format!("Invalid hex: {}", e)))?)) } else { Err(Error::custom("Invalid bytes format. Expected a 0x-prefixed hex string with even length")) @@ -101,6 +101,7 @@ mod tests { #[test] fn test_bytes_deserialize() { + let bytes0: Result = serde_json::from_str(r#""∀∂""#); let bytes1: Result = serde_json::from_str(r#""""#); let bytes2: Result = serde_json::from_str(r#""0x123""#); let bytes3: Result = serde_json::from_str(r#""0xgg""#); @@ -109,6 +110,7 @@ mod tests { let bytes5: Bytes = serde_json::from_str(r#""0x12""#).unwrap(); let bytes6: Bytes = serde_json::from_str(r#""0x0123""#).unwrap(); + assert!(bytes0.is_err()); assert!(bytes1.is_err()); assert!(bytes2.is_err()); assert!(bytes3.is_err()); diff --git a/rpc/src/v1/types/hash.rs b/rpc/src/v1/types/hash.rs index 9a51b0630..6cdaccf43 100644 --- a/rpc/src/v1/types/hash.rs +++ b/rpc/src/v1/types/hash.rs @@ -129,7 +129,7 @@ macro_rules! impl_hash { fn visit_str(self, value: &str) -> Result where E: serde::de::Error { - if value.len() < 2 || &value[0..2] != "0x" { + if value.len() < 2 || !value.starts_with("0x") { return Err(E::custom("expected a hex-encoded hash with 0x prefix")); } if value.len() != 2 + $size * 2 { diff --git a/rpc/src/v1/types/uint.rs b/rpc/src/v1/types/uint.rs index 122cb2269..3c5801c07 100644 --- a/rpc/src/v1/types/uint.rs +++ b/rpc/src/v1/types/uint.rs @@ -72,7 +72,7 @@ macro_rules! impl_uint { } fn visit_str(self, value: &str) -> Result where E: serde::de::Error { - if value.len() < 2 || &value[0..2] != "0x" { + if value.len() < 2 || !value.starts_with("0x") { return Err(E::custom("expected a hex-encoded numbers with 0x prefix")) } @@ -140,12 +140,14 @@ mod tests { #[test] fn should_fail_to_deserialize_decimals() { + let deserialized0: Res = serde_json::from_str(r#""∀∂""#); let deserialized1: Res = serde_json::from_str(r#""""#); let deserialized2: Res = serde_json::from_str(r#""0""#); let deserialized3: Res = serde_json::from_str(r#""10""#); let deserialized4: Res = serde_json::from_str(r#""1000000""#); let deserialized5: Res = serde_json::from_str(r#""1000000000000000000""#); + assert!(deserialized0.is_err()); assert!(deserialized1.is_err()); assert!(deserialized2.is_err()); assert!(deserialized3.is_err());