fix inverted split for DATA frame padding (#330)
This commit is contained in:
		
				
					committed by
					
						 Carl Lerche
						Carl Lerche
					
				
			
			
				
	
			
			
			
						parent
						
							1a8015da4a
						
					
				
				
					commit
					e656c42353
				
			| @@ -63,6 +63,18 @@ impl<T> Data<T> { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Returns whther the `PADDED` flag is set on this frame. | ||||
|     #[cfg(feature = "unstable")] | ||||
|     pub fn is_padded(&self) -> bool { | ||||
|         self.flags.is_padded() | ||||
|     } | ||||
|  | ||||
|     /// Sets the value for the `PADDED` flag on this frame. | ||||
|     #[cfg(feature = "unstable")] | ||||
|     pub fn set_padded(&mut self) { | ||||
|         self.flags.set_padded(); | ||||
|     } | ||||
|  | ||||
|     /// Returns a reference to this frame's payload. | ||||
|     /// | ||||
|     /// This does **not** include any padding that might have been originally | ||||
| @@ -192,6 +204,11 @@ impl DataFlags { | ||||
|     fn is_padded(&self) -> bool { | ||||
|         self.0 & PADDED == PADDED | ||||
|     } | ||||
|  | ||||
|     #[cfg(feature = "unstable")] | ||||
|     fn set_padded(&mut self) { | ||||
|         self.0 |= PADDED | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Default for DataFlags { | ||||
|   | ||||
| @@ -15,7 +15,8 @@ use bytes::Bytes; | ||||
| /// If the padded payload is invalid (e.g. the length of the padding is equal | ||||
| /// to the total length), returns `None`. | ||||
| pub fn strip_padding(payload: &mut Bytes) -> Result<u8, Error> { | ||||
|     if payload.len() == 0 { | ||||
|     let payload_len = payload.len(); | ||||
|     if payload_len == 0 { | ||||
|         // If this is the case, the frame is invalid as no padding length can be | ||||
|         // extracted, even though the frame should be padded. | ||||
|         return Err(Error::TooMuchPadding); | ||||
| @@ -23,14 +24,14 @@ pub fn strip_padding(payload: &mut Bytes) -> Result<u8, Error> { | ||||
|  | ||||
|     let pad_len = payload[0] as usize; | ||||
|  | ||||
|     if pad_len >= payload.len() { | ||||
|     if pad_len >= payload_len { | ||||
|         // This is invalid: the padding length MUST be less than the | ||||
|         // total frame size. | ||||
|         return Err(Error::TooMuchPadding); | ||||
|     } | ||||
|  | ||||
|     let _ = payload.split_to(1); | ||||
|     let _ = payload.split_off(pad_len); | ||||
|     let _ = payload.split_off(payload_len - pad_len - 1); | ||||
|  | ||||
|     Ok(pad_len as u8) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user