|
@@ -69,15 +69,17 @@ impl<'a> UnresolvedAddress<'a> {
|
|
|
}
|
|
|
AddressMode::FullyElided => {
|
|
|
bytes[0..2].copy_from_slice(&LINK_LOCAL_PREFIX[..]);
|
|
|
- match ll_address.unwrap() {
|
|
|
- LlAddress::Short(ll) => {
|
|
|
+ match ll_address {
|
|
|
+ Some(LlAddress::Short(ll)) => {
|
|
|
bytes[11..13].copy_from_slice(&EUI64_MIDDLE_VALUE[..]);
|
|
|
bytes[14..].copy_from_slice(&ll);
|
|
|
}
|
|
|
- LlAddress::Extended(_) => {
|
|
|
- bytes[8..].copy_from_slice(&ll_address.unwrap().as_eui_64().unwrap());
|
|
|
- }
|
|
|
- LlAddress::Absent => return Err(Error),
|
|
|
+ Some(addr @ LlAddress::Extended(_)) => match addr.as_eui_64() {
|
|
|
+ Some(addr) => bytes[8..].copy_from_slice(&addr),
|
|
|
+ None => return Err(Error),
|
|
|
+ },
|
|
|
+ Some(LlAddress::Absent) => return Err(Error),
|
|
|
+ None => return Err(Error),
|
|
|
}
|
|
|
Ok(ipv6::Address::from_bytes(&bytes[..]))
|
|
|
}
|
|
@@ -134,6 +136,10 @@ impl SixlowpanPacket {
|
|
|
pub fn dispatch(buffer: impl AsRef<[u8]>) -> Result<Self> {
|
|
|
let raw = buffer.as_ref();
|
|
|
|
|
|
+ if raw.is_empty() {
|
|
|
+ return Err(Error);
|
|
|
+ }
|
|
|
+
|
|
|
if raw[0] >> 3 == DISPATCH_FIRST_FRAGMENT_HEADER || raw[0] >> 3 == DISPATCH_FRAGMENT_HEADER
|
|
|
{
|
|
|
Ok(Self::FragmentHeader)
|