Fix CJDNS marker byte check
Only the first byte of a CJDNS address is 0xfc, the second byte should be ignored.
This commit is contained in:
parent
0a62e3bc37
commit
ec67456172
|
@ -226,7 +226,7 @@ impl Decodable for AddrV2 {
|
||||||
}
|
}
|
||||||
let addr: [u16; 8] = read_be_address(r)?;
|
let addr: [u16; 8] = read_be_address(r)?;
|
||||||
// check the first byte for the CJDNS marker
|
// check the first byte for the CJDNS marker
|
||||||
if addr[0] != u16::from_be_bytes([0xFC, 0x00]) {
|
if addr[0] >> 8 != 0xFC{
|
||||||
return Err(encode::Error::ParseFailed("Invalid CJDNS address"));
|
return Err(encode::Error::ParseFailed("Invalid CJDNS address"));
|
||||||
}
|
}
|
||||||
AddrV2::Cjdns(Ipv6Addr::new(
|
AddrV2::Cjdns(Ipv6Addr::new(
|
||||||
|
@ -425,8 +425,8 @@ mod test {
|
||||||
hex!("0520a2894dabaec08c0051a481a6dac88b64f98232ae42d4b6fd2fa81952dfe36a87")
|
hex!("0520a2894dabaec08c0051a481a6dac88b64f98232ae42d4b6fd2fa81952dfe36a87")
|
||||||
);
|
);
|
||||||
|
|
||||||
let ip = AddrV2::Cjdns(Ipv6Addr::from_str("fc00:1:2:3:4:5:6:7").unwrap());
|
let ip = AddrV2::Cjdns(Ipv6Addr::from_str("fc01:1:2:3:4:5:6:7").unwrap());
|
||||||
assert_eq!(serialize(&ip), hex!("0610fc000001000200030004000500060007"));
|
assert_eq!(serialize(&ip), hex!("0610fc010001000200030004000500060007"));
|
||||||
|
|
||||||
let ip = AddrV2::Unknown(170, hex!("01020304"));
|
let ip = AddrV2::Unknown(170, hex!("01020304"));
|
||||||
assert_eq!(serialize(&ip), hex!("aa0401020304"));
|
assert_eq!(serialize(&ip), hex!("aa0401020304"));
|
||||||
|
|
Loading…
Reference in New Issue