|
2 | 2 | */ |
3 | 3 |
|
4 | 4 | use byteorder::{ByteOrder, BigEndian}; |
5 | | -use nom::{be_u16, be_u32, rest}; |
| 5 | +use nom::{Needed, Err, |
| 6 | + number::complete::{be_u16, be_u32}, |
| 7 | + combinator::rest, |
| 8 | +}; |
6 | 9 |
|
7 | 10 | use crate::toxcore::binary_io::*; |
8 | 11 | use crate::toxcore::crypto_core::*; |
@@ -40,7 +43,7 @@ pub struct CryptoData { |
40 | 43 |
|
41 | 44 | impl FromBytes for CryptoData { |
42 | 45 | named!(from_bytes<CryptoData>, do_parse!( |
43 | | - verify!(rest_len, |len| len <= MAX_CRYPTO_PACKET_SIZE) >> |
| 46 | + verify!(rest_len, |len| *len <= MAX_CRYPTO_PACKET_SIZE) >> |
44 | 47 | tag!("\x1b") >> |
45 | 48 | nonce_last_bytes: be_u16 >> |
46 | 49 | payload: rest >> |
@@ -91,15 +94,18 @@ impl CryptoData { |
91 | 94 | GetPayloadError::decrypt() |
92 | 95 | })?; |
93 | 96 | match CryptoDataPayload::from_bytes(&decrypted) { |
94 | | - IResult::Incomplete(needed) => { |
95 | | - debug!(target: "Dht", "CryptoDataPayload return deserialize error: {:?}", needed); |
| 97 | + Err(Err::Incomplete(Needed::Unknown)) => { |
| 98 | + Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec())) |
| 99 | + }, |
| 100 | + Err(Err::Incomplete(needed)) => { |
96 | 101 | Err(GetPayloadError::incomplete(needed, self.payload.to_vec())) |
97 | 102 | }, |
98 | | - IResult::Error(error) => { |
99 | | - debug!(target: "Dht", "CryptoDataPayload return deserialize error: {:?}", error); |
100 | | - Err(GetPayloadError::deserialize(error, self.payload.to_vec())) |
| 103 | + Err(Err::Error(error)) => { |
| 104 | + let (_, kind) = error; |
| 105 | + Err(GetPayloadError::deserialize(kind, self.payload.to_vec())) |
101 | 106 | }, |
102 | | - IResult::Done(_, payload) => { |
| 107 | + Err(Err::Failure(e)) => panic!("CryptoDataPayload deserialize failed with unrecoverable error: {:?}", e), |
| 108 | + Ok((_, payload)) => { |
103 | 109 | Ok(payload) |
104 | 110 | } |
105 | 111 | } |
@@ -151,7 +157,7 @@ impl ToBytes for CryptoDataPayload { |
151 | 157 | #[cfg(test)] |
152 | 158 | mod tests { |
153 | 159 | use super::*; |
154 | | - use nom::Needed; |
| 160 | + use nom::error::ErrorKind; |
155 | 161 |
|
156 | 162 | encode_decode_test!( |
157 | 163 | crypto_data_encode_decode, |
@@ -239,6 +245,6 @@ mod tests { |
239 | 245 | }; |
240 | 246 | let decoded_payload = invalid_packet.get_payload(&shared_secret, &nonce); |
241 | 247 | assert!(decoded_payload.is_err()); |
242 | | - assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::IncompletePayload { needed: Needed::Size(4), payload: invalid_packet.payload }); |
| 248 | + assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Deserialize { error: ErrorKind::Eof, payload: invalid_packet.payload }); |
243 | 249 | } |
244 | 250 | } |
0 commit comments