From f76a4b7f83de9ad1ff56ec3a624fef243d4e2bfc Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 11 Jul 2024 10:05:23 +0100 Subject: [PATCH] lrwn: Allow empty string for AES128Key, DevAddr, EUI64 and NetID. In case an empty string is provided, the default "null" value will be used. Fixes #453. --- lrwn/src/aes128.rs | 4 +++- lrwn/src/devaddr.rs | 4 +++- lrwn/src/eui64.rs | 4 +++- lrwn/src/netid.rs | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lrwn/src/aes128.rs b/lrwn/src/aes128.rs index f35387fd..200bdb0d 100644 --- a/lrwn/src/aes128.rs +++ b/lrwn/src/aes128.rs @@ -62,7 +62,9 @@ impl FromStr for AES128Key { type Err = Error; fn from_str(s: &str) -> Result { let mut bytes: [u8; 16] = [0; 16]; - hex::decode_to_slice(s, &mut bytes)?; + if !s.is_empty() { + hex::decode_to_slice(s, &mut bytes)?; + } Ok(AES128Key(bytes)) } } diff --git a/lrwn/src/devaddr.rs b/lrwn/src/devaddr.rs index c0e01e2c..f5293a6e 100644 --- a/lrwn/src/devaddr.rs +++ b/lrwn/src/devaddr.rs @@ -234,7 +234,9 @@ impl FromStr for DevAddr { type Err = Error; fn from_str(s: &str) -> Result { let mut bytes: [u8; 4] = [0; 4]; - hex::decode_to_slice(s, &mut bytes)?; + if !s.is_empty() { + hex::decode_to_slice(s, &mut bytes)?; + } Ok(DevAddr(bytes)) } } diff --git a/lrwn/src/eui64.rs b/lrwn/src/eui64.rs index 2c1972a5..f1235989 100644 --- a/lrwn/src/eui64.rs +++ b/lrwn/src/eui64.rs @@ -70,7 +70,9 @@ impl FromStr for EUI64 { type Err = Error; fn from_str(s: &str) -> Result { let mut bytes: [u8; 8] = [0; 8]; - hex::decode_to_slice(s, &mut bytes)?; + if !s.is_empty() { + hex::decode_to_slice(s, &mut bytes)?; + } Ok(EUI64(bytes)) } } diff --git a/lrwn/src/netid.rs b/lrwn/src/netid.rs index deccb272..6624a49b 100644 --- a/lrwn/src/netid.rs +++ b/lrwn/src/netid.rs @@ -129,7 +129,9 @@ impl FromStr for NetID { fn from_str(s: &str) -> Result { let mut bytes: [u8; 3] = [0; 3]; - hex::decode_to_slice(s, &mut bytes)?; + if !s.is_empty() { + hex::decode_to_slice(s, &mut bytes)?; + } Ok(NetID(bytes)) }