Skip to content

Commit ba7886c

Browse files
sockets::unix: reading messages beyond the buffer size
Signed-off-by: Andy-Python-Programmer <[email protected]>
1 parent 978577f commit ba7886c

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/aero_kernel/src/socket/unix.rs

+11-4
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,19 @@ impl MessageQueue {
7979
}
8080

8181
pub fn read(&mut self, buffer: &mut [u8]) -> usize {
82-
if let Some(message) = self.messages.pop_front() {
82+
if let Some(message) = self.messages.front_mut() {
8383
let message_len = message.data.len();
84-
assert!(buffer.len() >= message_len);
84+
let size = core::cmp::min(buffer.len(), message_len);
8585

86-
buffer[..message_len].copy_from_slice(message.data.as_slice());
87-
message_len
86+
buffer[..size].copy_from_slice(&message.data[..size]);
87+
88+
if size < message_len {
89+
message.data.drain(..size);
90+
return size;
91+
}
92+
93+
self.messages.pop_front();
94+
size
8895
} else {
8996
unreachable!("MessageQueue::read() called when queue is empty");
9097
}

0 commit comments

Comments
 (0)