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)?;