From 73f39510fe992b64d675540a4dd3b33ede47b66f Mon Sep 17 00:00:00 2001 From: Cain <75994858+cainthebest@users.noreply.github.com> Date: Sat, 7 Sep 2024 00:23:57 +0100 Subject: [PATCH] fix(buf): add error for out of bounds panic on read string --- crates/lib/src/buffer.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/lib/src/buffer.rs b/crates/lib/src/buffer.rs index 967ed4a..5485d90 100644 --- a/crates/lib/src/buffer.rs +++ b/crates/lib/src/buffer.rs @@ -145,6 +145,15 @@ impl<'a, B: ByteOrder> Buffer<'a, B> { /// /// Returns a `BufferError` if there is an error decoding the string. pub fn read_string(&mut self, until: Option) -> GDResult { + // Check if the cursor is out of bounds. + let remaining = self.remaining_length(); + if self.cursor > remaining { + return Err(PacketUnderflow.context(format!( + "Cursor position {} is out of bounds when reading string. Remaining bytes: {remaining}", + self.cursor + ))); + } + // Slice the data array from the current cursor position to the end. let data_slice = &self.data[self.cursor ..];