From e2c97a365659013ead20a4cc2d7720aafb8d7b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 10 Nov 2017 21:45:23 +0100 Subject: [PATCH] Add tests for invalid cases. --- substrate/primitives/src/hash.rs | 10 ++++++++++ substrate/primitives/src/uint.rs | 20 +++++++++++++++++++- substrate/serializer/src/lib.rs | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/substrate/primitives/src/hash.rs b/substrate/primitives/src/hash.rs index 144655f0af..788a395f0e 100644 --- a/substrate/primitives/src/hash.rs +++ b/substrate/primitives/src/hash.rs @@ -112,4 +112,14 @@ mod tests { assert_eq!(number, ser::from_str(&format!("{:?}", expected)).unwrap()); } } + + #[test] + fn test_invalid() { + assert!(ser::from_str::("\"0x000000000000000000000000000000000000000000000000000000000000000\"").unwrap_err().is_data()); + assert!(ser::from_str::("\"0x000000000000000000000000000000000000000000000000000000000000000g\"").unwrap_err().is_data()); + assert!(ser::from_str::("\"0x00000000000000000000000000000000000000000000000000000000000000000\"").unwrap_err().is_data()); + assert!(ser::from_str::("\"\"").unwrap_err().is_data()); + assert!(ser::from_str::("\"0\"").unwrap_err().is_data()); + assert!(ser::from_str::("\"10\"").unwrap_err().is_data()); + } } diff --git a/substrate/primitives/src/uint.rs b/substrate/primitives/src/uint.rs index 95714b74d4..305523fe71 100644 --- a/substrate/primitives/src/uint.rs +++ b/substrate/primitives/src/uint.rs @@ -45,7 +45,7 @@ macro_rules! impl_serde { } fn visit_str(self, v: &str) -> Result { - if v.len() < 2 || &v[0..2] != "0x" { + if v.len() < 3 || &v[0..2] != "0x" { return Err(E::custom("prefix is missing")) } @@ -104,10 +104,28 @@ mod tests { assert_eq!(format!("{:?}", expected), ser::to_string_pretty(&number)); assert_eq!(number, ser::from_str(&format!("{:?}", expected)).unwrap()); } + + // Invalid examples + assert!(ser::from_str::<$name>("\"0x\"").unwrap_err().is_data()); + assert!(ser::from_str::<$name>("\"0xg\"").unwrap_err().is_data()); + assert!(ser::from_str::<$name>("\"\"").unwrap_err().is_data()); + assert!(ser::from_str::<$name>("\"10\"").unwrap_err().is_data()); + assert!(ser::from_str::<$name>("\"0\"").unwrap_err().is_data()); } } } test!(U256, test_u256); test!(U512, test_u512); + + #[test] + fn test_large_values() { + assert_eq!( + ser::to_string_pretty(&!U256::zero()), + "\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"" + ); + assert!( + ser::from_str::("\"0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"").unwrap_err().is_data() + ); + } } diff --git a/substrate/serializer/src/lib.rs b/substrate/serializer/src/lib.rs index 56b9e71257..9660f95f71 100644 --- a/substrate/serializer/src/lib.rs +++ b/substrate/serializer/src/lib.rs @@ -24,7 +24,7 @@ extern crate serde; extern crate serde_json; -pub use serde_json::{from_str, from_slice, from_reader, Result}; +pub use serde_json::{from_str, from_slice, from_reader, Result, Error}; const PROOF: &str = "Serializers are infallible; qed";