diff --git a/firmware/rust1/src/modbus_server.rs b/firmware/rust1/src/modbus_server.rs index bd13b5b029d53f801ab691039c4e607c4f3a0472..a9cde9699b2c09fba23421671a1fcd3f99589c84 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)?;