diff --git a/silentpayments/src/encoding/mod.rs b/silentpayments/src/encoding/mod.rs index a8d90ed..341b33d 100644 --- a/silentpayments/src/encoding/mod.rs +++ b/silentpayments/src/encoding/mod.rs @@ -380,7 +380,10 @@ impl TryFrom<&str> for SilentPaymentCode { let hrp = checked_hrpstring.hrp(); let mut payload = checked_hrpstring.fe32_iter::<&mut dyn Iterator>(); - let version = payload.nth(0).into_iter().collect::>()[0].to_u8(); + let version = payload + .next() + .ok_or(VersionError::WrongPayloadLength)? + .to_u8(); let data = payload.fes_to_bytes().collect::>(); let keys = match version { 0 => { @@ -660,6 +663,15 @@ mod test { assert_encoding(10); } + #[test] + fn fail_to_parse_code_with_empty_payload() { + let error = SilentPaymentCode::try_from("sp10ajr90").unwrap_err(); + assert_eq!( + "payload length does not match version spec", + error.to_string() + ); + } + #[test] fn get_label() { let expected_label: &str =