From 09d363b7335453cad7e43fd54f856c3941b6c1c3 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Tue, 28 Jul 2026 10:13:20 +0200 Subject: [PATCH 1/3] Fix max recv length to 1.024bytes. --- pymodbus/transport/transport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymodbus/transport/transport.py b/pymodbus/transport/transport.py index c38fc3693..d433bf434 100644 --- a/pymodbus/transport/transport.py +++ b/pymodbus/transport/transport.py @@ -305,9 +305,9 @@ def datagram_received(self, data: bytes, addr: tuple | None) -> None: if not data: return Log.transport_dump(Log.RECV_DATA, data, self.recv_buffer) + self.recv_buffer += data if len(self.recv_buffer) > 1024: self.recv_buffer = b"" - self.recv_buffer += data cut = self.callback_data(self.recv_buffer, addr=addr) self.recv_buffer = self.recv_buffer[cut:] if self.recv_buffer: From 488402827302512afbbf989b83d606853d3a2267 Mon Sep 17 00:00:00 2001 From: jan iversen Date: Tue, 28 Jul 2026 10:20:38 +0200 Subject: [PATCH 2/3] Correct buffer_overrun test. --- pymodbus/transport/transport.py | 1 + test/transport/test_protocol.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pymodbus/transport/transport.py b/pymodbus/transport/transport.py index d433bf434..c92352ed1 100644 --- a/pymodbus/transport/transport.py +++ b/pymodbus/transport/transport.py @@ -308,6 +308,7 @@ def datagram_received(self, data: bytes, addr: tuple | None) -> None: self.recv_buffer += data if len(self.recv_buffer) > 1024: self.recv_buffer = b"" + return cut = self.callback_data(self.recv_buffer, addr=addr) self.recv_buffer = self.recv_buffer[cut:] if self.recv_buffer: diff --git a/test/transport/test_protocol.py b/test/transport/test_protocol.py index 26e7b5d7b..7ff2f8456 100644 --- a/test/transport/test_protocol.py +++ b/test/transport/test_protocol.py @@ -142,7 +142,7 @@ async def test_datagram_buffer_overrun(self, client): client.callback_data = mock.MagicMock(return_value=0) client.recv_buffer = bytearray([0x01] * 2000) client.datagram_received(b"abc", "127.0.0.1") - assert client.recv_buffer == b"abc" + assert client.recv_buffer == b"" async def test_callback_connected(self, use_clc, dummy_protocol): """Test callbacks.""" From 5f7e23b6e4afc2d455b80f5021014bf58b837f4b Mon Sep 17 00:00:00 2001 From: jan iversen Date: Tue, 28 Jul 2026 10:33:25 +0200 Subject: [PATCH 3/3] Test2. --- test/transport/test_comm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/transport/test_comm.py b/test/transport/test_comm.py index 11201448c..5515e37a5 100644 --- a/test/transport/test_comm.py +++ b/test/transport/test_comm.py @@ -182,7 +182,7 @@ async def test_serial_poll(self, client, server, use_port): await asyncio.sleep(0.5) assert len(server.active_connections) == 1 server_connected = list(server.active_connections.values())[0] - test_data = b"abcd" * 1000 + test_data = b"abcd" * 10 client.send(test_data) await asyncio.sleep(0.5) assert server_connected.recv_buffer == test_data