According to the Modbus specification (http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf, section 2.1) a Modbus RTU master can send a broadcast to all of it's slaves. This broadcasts can only be write requests as otherwise collisions could occur, eg. on a RS-485 bus. When receiving such a broadcast, the slave should process the request as usual, but must not reply anything, neither a normal response nor an exception reply in case of an error. Adjust the unit test for this case, too. Signed-off-by: Michael Heimpold <firstname.lastname@example.org>
This patch has been developed by Andrey Skvortsov, Michael Heimpold and Stéphane Raimbault. - avoid bash'isms and use of GNU find - terminate server after test run (ignored in TCP mode) - add *.log, *.trs to .gitignore - unit-test-client returns 0 on success - save exit code of unit-test-client for make check status - replace kill by killall - add entry in README
Do not allow raw request length longer than the PDU size plus the additional requested slave address byte. Without this check modbus_send_raw_request could be used to trigger a buffer overflow on the stack since the parameter is passed unchecked to memcpy. Thanks to Hanno Neuer for spotting this security flaw. Signed-off-by: Michael Heimpold <email@example.com>
This replaces the lengthy license text headers with a short and standardized license tag. See http://spdx.org for details. This is useful e.g. for license compliance tools which scan through files and generate a report of the licenses used in a project. Signed-off-by: Michael Heimpold <firstname.lastname@example.org>
This change has introduced by 83c3410. Fix unit tests on some systems.
This fixes the message "error: 'for' loop initial declarations are only allowed in C99 mode", spotted during cross-compiling of libmodbus. The compiler (gcc) actually does support -std=c99 but it gets not enabled by default. So a solution would be to enforce c99 mode via CFLAGS, but this will knock out all compilers which do not support this mode. Moving the declaration out of the loop initialisation, seems to be the simpler solution. Signed-off-by: Michael Heimpold <email@example.com>
Protects against crafted write requests with a large quantity but a small byte count. If address + quantity was in the mapping space of the server and quantity greater than the response size, it was possible to crash the server. The sleep/flush sequence improves the handling of following requests.