From e82b1385ad9e3bb71a9fabd8a2060428d55af634 Mon Sep 17 00:00:00 2001 From: Conor Patrick Date: Thu, 25 Mar 2021 19:13:43 -0700 Subject: [PATCH] Skip icon field if it's too long --- src/webauthn.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/webauthn.rs b/src/webauthn.rs index ec0c1a7..f9e85e5 100644 --- a/src/webauthn.rs +++ b/src/webauthn.rs @@ -15,6 +15,7 @@ pub struct PublicKeyCredentialRpEntity { #[serde(rename_all = "camelCase")] pub struct PublicKeyCredentialUserEntity { pub id: Bytes, + #[serde(default, deserialize_with = "deserialize_from_str_and_skip_if_too_long")] #[serde(skip_serializing_if = "Option::is_none")] pub icon: Option>, #[serde(skip_serializing_if = "Option::is_none")] @@ -23,6 +24,24 @@ pub struct PublicKeyCredentialUserEntity { pub display_name: Option>, } +fn deserialize_from_str_and_skip_if_too_long<'de, L, D>(deserializer: D) -> Result>, D::Error> +where + L: heapless_bytes::Unsigned + heapless_bytes::ArrayLength, + D: serde::Deserializer<'de>, +{ + let result: Result, D::Error> = serde::Deserialize::deserialize(deserializer); + match result { + Ok(string) => { + Ok(Some(string)) + }, + Err(err) => { + info_now!("skipping field: {:?}", err); + Ok(None) + } + } +} + + impl PublicKeyCredentialUserEntity { pub fn from(id: Bytes) -> Self { Self { id, icon: None, name: None, display_name: None }