File tree Expand file tree Collapse file tree 2 files changed +20
-8
lines changed
watermelon-proto/src/proto/decoder Expand file tree Collapse file tree 2 files changed +20
-8
lines changed Original file line number Diff line number Diff line change @@ -83,8 +83,14 @@ pub(super) fn decode(
8383 }
8484
8585 let Some ( control_line_len) = memchr:: memmem:: find ( read_buf, b"\r \n " ) else {
86- * last_bytes_read = read_buf. len ( ) ;
87- return Ok ( None ) ;
86+ return if read_buf. len ( ) < MAX_HEAD_LEN {
87+ * last_bytes_read = read_buf. len ( ) ;
88+ Ok ( None )
89+ } else {
90+ Err ( DecoderError :: HeadTooLong {
91+ len : read_buf. len ( ) ,
92+ } )
93+ } ;
8894 } ;
8995
9096 let mut control_line = read_buf. split_to ( control_line_len + "\r \n " . len ( ) ) ;
@@ -118,10 +124,6 @@ pub(super) fn decode(
118124 } else if let Some ( info) = control_line. strip_prefix ( b"INFO " ) {
119125 let info = serde_json:: from_slice ( info) . map_err ( DecoderError :: InvalidInfo ) ?;
120126 Ok ( Some ( ServerOp :: Info { info } ) )
121- } else if read_buf. len ( ) > MAX_HEAD_LEN {
122- Err ( DecoderError :: HeadTooLong {
123- len : read_buf. len ( ) ,
124- } )
125127 } else {
126128 Err ( DecoderError :: InvalidCommand )
127129 } ;
Original file line number Diff line number Diff line change @@ -47,13 +47,13 @@ impl Default for StreamDecoder {
4747#[ cfg( test) ]
4848mod tests {
4949 use bytes:: { BufMut as _, Bytes } ;
50- use claims:: assert_ok_eq;
50+ use claims:: { assert_matches , assert_ok_eq} ;
5151
5252 use crate :: {
5353 error:: ServerError ,
5454 headers:: HeaderMap ,
5555 message:: { MessageBase , ServerMessage } ,
56- proto:: server:: ServerOp ,
56+ proto:: { error :: DecoderError , server:: ServerOp } ,
5757 Subject ,
5858 } ;
5959
@@ -121,4 +121,14 @@ mod tests {
121121 ) ;
122122 assert_ok_eq ! ( decoder. decode( ) , None ) ;
123123 }
124+
125+ #[ test]
126+ fn head_too_long ( ) {
127+ let mut decoder = StreamDecoder :: new ( ) ;
128+ decoder. read_buf ( ) . put_bytes ( 0 , 20000 ) ;
129+ assert_matches ! (
130+ decoder. decode( ) ,
131+ Err ( DecoderError :: HeadTooLong { len: 20000 } )
132+ ) ;
133+ }
124134}
You can’t perform that action at this time.
0 commit comments