From 5146c87940da5836055f8b7c64f85ee3f4b8775f Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Wed, 17 May 2023 15:12:19 +0100 Subject: [PATCH] Fix netid_type method. It would panic in case all bits are set (which would be an invalid DevAddr prefix type). --- lrwn/src/devaddr.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lrwn/src/devaddr.rs b/lrwn/src/devaddr.rs index 2ea50eca..c05e22f1 100644 --- a/lrwn/src/devaddr.rs +++ b/lrwn/src/devaddr.rs @@ -159,18 +159,18 @@ impl DevAddr { *self == dev_addr } - pub fn netid_type(&self) -> u8 { + pub fn netid_type(&self) -> Result { for i in (0..=7).rev() { if self.0[0] & (1 << i) == 0 { - return 7 - i; + return Ok(7 - i); } } - panic!("netid_type bug"); + Err(anyhow!("Invalid type prefix value")) } - pub fn nwkid(&self) -> Vec { - match self.netid_type() { + pub fn nwkid(&self) -> Result> { + Ok(match self.netid_type()? { 0 => self.get_nwkid(1, 6), 1 => self.get_nwkid(2, 6), 2 => self.get_nwkid(3, 9), @@ -180,7 +180,7 @@ impl DevAddr { 6 => self.get_nwkid(7, 15), 7 => self.get_nwkid(8, 17), _ => vec![], - } + }) } pub fn set_dev_addr_prefix(&mut self, prefix: DevAddrPrefix) { @@ -334,14 +334,14 @@ mod tests { #[test] fn test_dev_addr_netid_type() { for tst in tests() { - assert_eq!(tst.netid_type, tst.devaddr.netid_type()); + assert_eq!(tst.netid_type, tst.devaddr.netid_type().unwrap()); } } #[test] fn test_dev_addr_nwkid() { for tst in tests() { - assert_eq!(tst.nwkid, tst.devaddr.nwkid()); + assert_eq!(tst.nwkid, tst.devaddr.nwkid().unwrap()); } }