record last index when starting to encode a CONTINUATION frame
This commit is contained in:
		| @@ -88,9 +88,11 @@ impl Encoder { | |||||||
|                 dst.truncate(len); |                 dst.truncate(len); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             unreachable!(); |             unreachable!("encode_size_updates errored"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         let mut last_index = None; | ||||||
|  |  | ||||||
|         if let Some(resume) = resume { |         if let Some(resume) = resume { | ||||||
|             let len = dst.len(); |             let len = dst.len(); | ||||||
|  |  | ||||||
| @@ -103,10 +105,9 @@ impl Encoder { | |||||||
|                 dst.truncate(len); |                 dst.truncate(len); | ||||||
|                 return Encode::Partial(resume); |                 return Encode::Partial(resume); | ||||||
|             } |             } | ||||||
|  |             last_index = Some(resume.index); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         let mut last_index = None; |  | ||||||
|  |  | ||||||
|         for header in headers { |         for header in headers { | ||||||
|             let len = dst.len(); |             let len = dst.len(); | ||||||
|  |  | ||||||
| @@ -132,13 +133,15 @@ impl Encoder { | |||||||
|                 // which case, we skip table lookup and just use the same index |                 // which case, we skip table lookup and just use the same index | ||||||
|                 // as the previous entry. |                 // as the previous entry. | ||||||
|                 Err(value) => { |                 Err(value) => { | ||||||
|                     let res = |                     let index = last_index.as_ref().unwrap_or_else(|| { | ||||||
|                         self.encode_header_without_name(last_index.as_ref().unwrap(), &value, dst); |                         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() { |                     if res.is_err() { | ||||||
|                         dst.truncate(len); |                         dst.truncate(len); | ||||||
|                         return Encode::Partial(EncodeState { |                         return Encode::Partial(EncodeState { | ||||||
|                             index: last_index.unwrap(), |                             index: last_index.unwrap(), // checked just above | ||||||
|                             value: Some(value), |                             value: Some(value), | ||||||
|                         }); |                         }); | ||||||
|                     } |                     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user