@@ -60,8 +60,9 @@ impl Decoder {
6060 self . decoded_data . extend_from_slice ( & data[ ..pos] ) ;
6161 & data[ pos..]
6262 }
63- // No decoded data into decoder, first time data arrives.
64- else if data. len ( ) >= PADDING {
63+ // No decoded data into decoder.
64+ else if self . decoded_data . len ( ) + data. len ( ) >= PADDING {
65+ // Deserializing the decoded data size
6566 let size_pos = std:: cmp:: min ( PADDING - self . decoded_data . len ( ) , PADDING ) ;
6667 self . decoded_data . extend_from_slice ( & data[ ..size_pos] ) ;
6768 let expected_size =
@@ -78,7 +79,7 @@ impl Decoder {
7879 & data[ expected_size..]
7980 }
8081 }
81- // No decoded data into decoder. First time data arrives. Not enough data to know about size.
82+ // No decoded data into decoder. Not enough data to know about size.
8283 else {
8384 self . decoded_data . extend_from_slice ( data) ;
8485 & data[ data. len ( ) ..]
@@ -273,5 +274,38 @@ mod tests {
273274 assert_eq ! ( decoded_data. unwrap( ) , & MESSAGE ) ;
274275 }
275276
277+ #[ test]
278+ // Data content:
279+ // a\n -> 2 < PADDING
280+ // aa\n -> 5 > PADDING
281+ // aaa\n -> 9 > PADDING
282+ fn decode_len_less_than_padding ( ) {
283+ let mut buffer = Vec :: new ( ) ;
284+ let mut decoder = Decoder :: new ( ) ;
285+
286+ buffer. push ( 'a' as u8 ) ;
287+ buffer. push ( '\n' as u8 ) ;
288+ let ( decoded_data, next_data) = decoder. decode ( & buffer) ;
289+ assert ! ( decoded_data. is_none( ) ) ;
290+ assert_eq ! ( next_data. len( ) , 0 ) ;
291+ buffer. clear ( ) ;
292+
293+ buffer. push ( 'a' as u8 ) ;
294+ buffer. push ( 'a' as u8 ) ;
295+ buffer. push ( '\n' as u8 ) ;
296+ let ( decoded_data, next_data) = decoder. decode ( & buffer) ;
297+ assert ! ( decoded_data. is_none( ) ) ;
298+ assert_eq ! ( next_data. len( ) , 0 ) ;
299+ buffer. clear ( ) ;
300+
301+ buffer. push ( 'a' as u8 ) ;
302+ buffer. push ( 'a' as u8 ) ;
303+ buffer. push ( 'a' as u8 ) ;
304+ buffer. push ( '\n' as u8 ) ;
305+ let ( decoded_data, next_data) = decoder. decode ( & buffer) ;
306+ assert ! ( decoded_data. is_none( ) ) ;
307+ assert_eq ! ( next_data. len( ) , 0 ) ;
308+ }
309+
276310 //TODO: test DecodingPool
277311}
0 commit comments