Extra log output

This commit is contained in:
Carl Lerche
2017-08-10 16:13:36 -07:00
parent a61562f6b8
commit 0d61832bf3
3 changed files with 26 additions and 2 deletions

View File

@@ -128,9 +128,17 @@ impl Headers {
{ {
let flags = HeadersFlag(head.flag()); let flags = HeadersFlag(head.flag());
trace!("loading headers; flags={:?}", flags);
// Read the padding length // Read the padding length
if flags.is_padded() { if flags.is_padded() {
let pad = src.get_u8() as usize; let pad = src.get_u8() as usize;
let len = src.get_ref().len();
if pad >= len {
trace!("too much padding");
return Err(Error::TooMuchPadding);
}
// Truncate the last `pad` bytes. // Truncate the last `pad` bytes.
let len = src.get_ref().len() - pad; let len = src.get_ref().len() - pad;
@@ -178,7 +186,7 @@ impl Headers {
// priority. // priority.
// //
// TODO: Provide a way to abort decoding if an error is hit. // TODO: Provide a way to abort decoding if an error is hit.
try!(decoder.decode(src, |header| { let res = decoder.decode(src, |header| {
use hpack::Header::*; use hpack::Header::*;
match header { match header {
@@ -191,9 +199,15 @@ impl Headers {
Path(v) => set_pseudo!(path, v), Path(v) => set_pseudo!(path, v),
Status(v) => set_pseudo!(status, v), Status(v) => set_pseudo!(status, v),
} }
})); });
if let Err(e) = res {
trace!("hpack decoding error; err={:?}", e);
return Err(e.into());
}
if err { if err {
trace!("repeated pseudo");
return Err(hpack::DecoderError::RepeatedPseudo.into()); return Err(hpack::DecoderError::RepeatedPseudo.into());
} }

View File

@@ -171,16 +171,20 @@ impl Decoder {
self.last_max_update = size; self.last_max_update = size;
} }
trace!("decode");
while src.has_remaining() { while src.has_remaining() {
// At this point we are always at the beginning of the next block // At this point we are always at the beginning of the next block
// within the HPACK data. The type of the block can always be // within the HPACK data. The type of the block can always be
// determined from the first byte. // determined from the first byte.
match try!(Representation::load(peek_u8(src))) { match try!(Representation::load(peek_u8(src))) {
Indexed => { Indexed => {
trace!(" Indexed; rem={:?}", src.remaining());
can_resize = false; can_resize = false;
f(try!(self.decode_indexed(src))); f(try!(self.decode_indexed(src)));
} }
LiteralWithIndexing => { LiteralWithIndexing => {
trace!(" LiteralWithIndexing; rem={:?}", src.remaining());
can_resize = false; can_resize = false;
let entry = try!(self.decode_literal(src, true)); let entry = try!(self.decode_literal(src, true));
@@ -190,11 +194,13 @@ impl Decoder {
f(entry); f(entry);
} }
LiteralWithoutIndexing => { LiteralWithoutIndexing => {
trace!(" LiteralWithoutIndexing; rem={:?}", src.remaining());
can_resize = false; can_resize = false;
let entry = try!(self.decode_literal(src, false)); let entry = try!(self.decode_literal(src, false));
f(entry); f(entry);
} }
LiteralNeverIndexed => { LiteralNeverIndexed => {
trace!(" LiteralNeverIndexed; rem={:?}", src.remaining());
can_resize = false; can_resize = false;
let entry = try!(self.decode_literal(src, false)); let entry = try!(self.decode_literal(src, false));
@@ -203,6 +209,7 @@ impl Decoder {
f(entry); f(entry);
} }
SizeUpdate => { SizeUpdate => {
trace!(" SizeUpdate; rem={:?}", src.remaining());
if !can_resize { if !can_resize {
return Err(DecoderError::InvalidMaxDynamicSize); return Err(DecoderError::InvalidMaxDynamicSize);
} }
@@ -277,6 +284,7 @@ impl Decoder {
let len = try!(decode_int(buf, 7)); let len = try!(decode_int(buf, 7));
if len > buf.remaining() { if len > buf.remaining() {
trace!("decode_string underflow; len={}; remaining={}", len, buf.remaining());
return Err(DecoderError::StringUnderflow); return Err(DecoderError::StringUnderflow);
} }

View File

@@ -50,6 +50,8 @@ impl<T> FramedRead<T> {
let kind = head.kind(); let kind = head.kind();
trace!(" -> kind={:?}", kind);
let frame = match kind { let frame = match kind {
Kind::Settings => { Kind::Settings => {
frame::Settings::load(head, &bytes[frame::HEADER_LEN..])?.into() frame::Settings::load(head, &bytes[frame::HEADER_LEN..])?.into()