@@ -173,31 +173,31 @@ impl FrameCodec {
173173 self . header = FrameHeader :: parse ( & mut cursor) ?;
174174 let advanced = cursor. position ( ) ;
175175 bytes:: Buf :: advance ( & mut self . in_buffer , advanced as _ ) ;
176+
176177 if let Some ( ( _, len) ) = & self . header {
177- // reserve full message length only once, even
178- // for multiple loops or if WouldBlock errors cause
179- // multiple fn calls.
180- self . in_buffer . reserve ( * len as usize ) ;
178+ let len = * len as usize ;
179+
180+ // Enforce frame size limit early
181+ if len > max_size {
182+ return Err ( Error :: Capacity ( CapacityError :: MessageTooLong {
183+ size : len,
184+ max_size,
185+ } ) ) ;
186+ }
187+
188+ // Reserve full message length only once, even for multiple
189+ // loops or if WouldBlock errors cause multiple fn calls.
190+ self . in_buffer . reserve ( len) ;
191+ } else {
192+ self . in_buffer . reserve ( FrameHeader :: MAX_SIZE ) ;
181193 }
182194 }
183195
184196 if let Some ( ( _, len) ) = & self . header {
185197 let len = * len as usize ;
186-
187- // Enforce frame size limit early and make sure `length`
188- // is not too big (fits into `usize`).
189- if len > max_size {
190- return Err ( Error :: Capacity ( CapacityError :: MessageTooLong {
191- size : len,
192- max_size,
193- } ) ) ;
194- }
195-
196198 if len <= self . in_buffer . len ( ) {
197199 break self . in_buffer . split_to ( len) ;
198200 }
199- } else {
200- self . in_buffer . reserve ( FrameHeader :: MAX_SIZE ) ;
201201 }
202202
203203 // Not enough data in buffer.
0 commit comments