From fc2fb487ea803ff8956ecd10b76464e9b209a425 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Fri, 10 May 2019 18:20:43 -0700 Subject: [PATCH] record last index when starting to encode a CONTINUATION frame --- src/hpack/encoder.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hpack/encoder.rs b/src/hpack/encoder.rs index 9c3a4c6..d6e8e12 100644 --- a/src/hpack/encoder.rs +++ b/src/hpack/encoder.rs @@ -88,9 +88,11 @@ impl Encoder { dst.truncate(len); } - unreachable!(); + unreachable!("encode_size_updates errored"); } + let mut last_index = None; + if let Some(resume) = resume { let len = dst.len(); @@ -103,10 +105,9 @@ impl Encoder { dst.truncate(len); return Encode::Partial(resume); } + last_index = Some(resume.index); } - let mut last_index = None; - for header in headers { let len = dst.len(); @@ -132,13 +133,15 @@ impl Encoder { // which case, we skip table lookup and just use the same index // as the previous entry. Err(value) => { - let res = - self.encode_header_without_name(last_index.as_ref().unwrap(), &value, dst); + let index = last_index.as_ref().unwrap_or_else(|| { + panic!("encoding header without name, but not previous index to use for name"); + }); + let res = self.encode_header_without_name(index, &value, dst); if res.is_err() { dst.truncate(len); return Encode::Partial(EncodeState { - index: last_index.unwrap(), + index: last_index.unwrap(), // checked just above value: Some(value), }); }