style(p2p): get rid of expects (#164)

* style(p2p): get rid of expects

* test: add test
This commit is contained in:
Matthias Seitz
2022-11-04 14:51:13 +01:00
committed by GitHub
parent f6d3a49d28
commit 5cb2c6e615

View File

@ -687,23 +687,26 @@ impl Encodable for DisconnectReason {
impl Decodable for DisconnectReason { impl Decodable for DisconnectReason {
fn decode(buf: &mut &[u8]) -> Result<Self, DecodeError> { fn decode(buf: &mut &[u8]) -> Result<Self, DecodeError> {
let first = *buf.first().expect("disconnect reason should have at least 1 byte"); if buf.len() < 3 {
buf.advance(1); return Err(DecodeError::Custom("disconnect reason should have 3 bytes"))
}
let first = buf[0];
if first != 0x01 { if first != 0x01 {
return Err(DecodeError::Custom("invalid disconnect reason - invalid snappy header")) return Err(DecodeError::Custom("invalid disconnect reason - invalid snappy header"))
} }
let second = *buf.first().expect("disconnect reason should have at least 2 bytes"); let second = buf[1];
buf.advance(1);
if second != 0x00 { if second != 0x00 {
// TODO: make sure this error message is correct // TODO: make sure this error message is correct
return Err(DecodeError::Custom("invalid disconnect reason - invalid snappy header")) return Err(DecodeError::Custom("invalid disconnect reason - invalid snappy header"))
} }
let reason = *buf.first().expect("disconnect reason should have 3 bytes"); let reason = buf[2];
buf.advance(1); let reason = DisconnectReason::try_from(reason)
DisconnectReason::try_from(reason) .map_err(|_| DecodeError::Custom("unknown disconnect reason"))?;
.map_err(|_| DecodeError::Custom("unknown disconnect reason")) buf.advance(3);
Ok(reason)
} }
} }
@ -952,6 +955,11 @@ mod tests {
} }
} }
#[test]
fn test_reason_too_short() {
assert!(DisconnectReason::decode(&mut &[0u8][..]).is_err())
}
#[test] #[test]
fn disconnect_encoding_length() { fn disconnect_encoding_length() {
let all_reasons = vec![ let all_reasons = vec![