quic: update to nom7

pull/7678/head
Philippe Antoine 4 years ago
parent 95125811b8
commit f3b6fd3329

@ -15,7 +15,7 @@
* 02110-1301, USA. * 02110-1301, USA.
*/ */
use nom::error::{ErrorKind, ParseError}; use nom7::error::{ErrorKind, ParseError};
use std::error::Error; use std::error::Error;
use std::fmt; use std::fmt;
@ -54,12 +54,12 @@ impl fmt::Display for QuicError {
impl Error for QuicError {} impl Error for QuicError {}
impl From<nom::Err<QuicError>> for QuicError { impl From<nom7::Err<QuicError>> for QuicError {
fn from(err: nom::Err<QuicError>) -> Self { fn from(err: nom7::Err<QuicError>) -> Self {
match err { match err {
nom::Err::Incomplete(_) => QuicError::Incomplete, nom7::Err::Incomplete(_) => QuicError::Incomplete,
nom::Err::Error(e) => e, nom7::Err::Error(e) => e,
nom::Err::Failure(e) => e, nom7::Err::Failure(e) => e,
} }
} }
} }

@ -17,12 +17,12 @@
use super::error::QuicError; use super::error::QuicError;
use crate::quic::parser::quic_var_uint; use crate::quic::parser::quic_var_uint;
use nom::bytes::complete::take; use nom7::bytes::complete::take;
use nom::combinator::{all_consuming, complete}; use nom7::combinator::{all_consuming, complete};
use nom::multi::{count, many0}; use nom7::multi::{count, many0};
use nom::number::complete::{be_u16, be_u32, be_u8, le_u16, le_u32}; use nom7::number::complete::{be_u16, be_u32, be_u8, le_u16, le_u32};
use nom::sequence::pair; use nom7::sequence::pair;
use nom::IResult; use nom7::IResult;
use num::FromPrimitive; use num::FromPrimitive;
use std::fmt; use std::fmt;
use tls_parser::TlsMessage::Handshake; use tls_parser::TlsMessage::Handshake;
@ -355,13 +355,13 @@ fn parse_crypto_frame(input: &[u8]) -> IResult<&[u8], Frame, QuicError> {
} }
_ => {} _ => {}
} }
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
fn parse_tag(input: &[u8]) -> IResult<&[u8], StreamTag, QuicError> { fn parse_tag(input: &[u8]) -> IResult<&[u8], StreamTag, QuicError> {
let (rest, tag) = be_u32(input)?; let (rest, tag) = be_u32(input)?;
let tag = StreamTag::from_u32(tag).ok_or(nom::Err::Error(QuicError::StreamTagNoMatch(tag)))?; let tag = StreamTag::from_u32(tag).ok_or(nom7::Err::Error(QuicError::StreamTagNoMatch(tag)))?;
Ok((rest, tag)) Ok((rest, tag))
} }
@ -387,7 +387,7 @@ fn parse_crypto_stream(input: &[u8]) -> IResult<&[u8], Vec<TagValue>, QuicError>
// offsets should be increasing // offsets should be increasing
let value_len = offset let value_len = offset
.checked_sub(previous_offset) .checked_sub(previous_offset)
.ok_or(nom::Err::Error(QuicError::InvalidPacket))?; .ok_or(nom7::Err::Error(QuicError::InvalidPacket))?;
let (new_rest, value) = take(value_len)(rest)?; let (new_rest, value) = take(value_len)(rest)?;
previous_offset = offset; previous_offset = offset;
@ -448,7 +448,7 @@ fn parse_crypto_stream_frame(input: &[u8]) -> IResult<&[u8], Frame, QuicError> {
let (rest, _offset) = quic_var_uint(input)?; let (rest, _offset) = quic_var_uint(input)?;
let (rest, data_length) = quic_var_uint(rest)?; let (rest, data_length) = quic_var_uint(rest)?;
if data_length > u32::MAX as u64 { if data_length > u32::MAX as u64 {
return Err(nom::Err::Error(QuicError::Unhandled)); return Err(nom7::Err::Error(QuicError::Unhandled));
} }
let (rest, stream_data) = take(data_length as u32)(rest)?; let (rest, stream_data) = take(data_length as u32)(rest)?;

@ -16,10 +16,10 @@
*/ */
use super::error::QuicError; use super::error::QuicError;
use super::frames::Frame; use super::frames::Frame;
use nom::bytes::complete::take; use nom7::bytes::complete::take;
use nom::combinator::{all_consuming, map}; use nom7::combinator::{all_consuming, map};
use nom::number::complete::{be_u24, be_u32, be_u8}; use nom7::number::complete::{be_u24, be_u32, be_u8};
use nom::IResult; use nom7::IResult;
use std::convert::TryFrom; use std::convert::TryFrom;
/* /*
@ -246,7 +246,7 @@ impl QuicHeader {
}, },
)); ));
} else { } else {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
} else if !flags.is_long { } else if !flags.is_long {
// Decode short header // Decode short header
@ -266,7 +266,7 @@ impl QuicHeader {
}, },
)); ));
} else { } else {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
} else { } else {
// Decode Long header // Decode Long header
@ -284,7 +284,7 @@ impl QuicHeader {
0x7d => QuicType::Handshake, 0x7d => QuicType::Handshake,
0x7c => QuicType::ZeroRTT, 0x7c => QuicType::ZeroRTT,
_ => { _ => {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
} }
} else { } else {
@ -294,7 +294,7 @@ impl QuicHeader {
0x02 => QuicType::Handshake, 0x02 => QuicType::Handshake,
0x03 => QuicType::Retry, 0x03 => QuicType::Retry,
_ => { _ => {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
} }
} }
@ -350,18 +350,18 @@ impl QuicHeader {
let (rest, length) = if has_length { let (rest, length) = if has_length {
let (rest2, plength) = quic_var_uint(rest)?; let (rest2, plength) = quic_var_uint(rest)?;
if plength > rest2.len() as u64 { if plength > rest2.len() as u64 {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
if let Ok(length) = u16::try_from(plength) { if let Ok(length) = u16::try_from(plength) {
(rest2, length) (rest2, length)
} else { } else {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
} else { } else {
if let Ok(length) = u16::try_from(rest.len()) { if let Ok(length) = u16::try_from(rest.len()) {
(rest, length) (rest, length)
} else { } else {
return Err(nom::Err::Error(QuicError::InvalidPacket)); return Err(nom7::Err::Error(QuicError::InvalidPacket));
} }
}; };

Loading…
Cancel
Save