Skip to content

Commit 0a6563c

Browse files
committed
Do max_size check once after header parse
1 parent fadca62 commit 0a6563c

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

src/protocol/frame/mod.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)