From 4eb7bd0730d1ce37852e6d7dfeb10401e8b9acab Mon Sep 17 00:00:00 2001 From: Benjamin Koch <bbbsnowball@gmail.com> Date: Fri, 9 Jun 2023 18:40:18 +0200 Subject: [PATCH] avoid overflow before error check --- firmware/rust1/src/modbus_server.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/rust1/src/modbus_server.rs b/firmware/rust1/src/modbus_server.rs index bd13b5b..a9cde96 100644 --- a/firmware/rust1/src/modbus_server.rs +++ b/firmware/rust1/src/modbus_server.rs @@ -372,11 +372,11 @@ impl<REGS: ModbusRegisters> ModbusServer<REGS> { let record_number = rx.read_u16be()?; let record_length = rx.read_u16be()?; let pos_of_length = txbuf.len(); - push(txbuf, 1 + 2 * record_length as u8)?; - push(txbuf, ref_type)?; - if record_length > 127 || record_length as usize * 2 > capacity - txbuf.len() { + if record_length > 127 || 2 + txbuf.len() + record_length as usize * 2 > capacity { return Err(IllegalDataValue) } + push(txbuf, 1 + 2 * record_length as u8)?; + push(txbuf, ref_type)?; let len_before = txbuf.len(); let pusher = U16Pusher { buf: txbuf }; self.regs.read_file_record(device_addr, ref_type, file_number, record_number, record_length, pusher)?; -- GitLab