Skip to content

Commit d6eaa36

Browse files
authored
Merge pull request #128 from facchinm/update_libmodbus
Update libmodbus
2 parents 0cee633 + e19543e commit d6eaa36

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/libmodbus/modbus.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -897,9 +897,10 @@ int modbus_reply(modbus_t *ctx, const uint8_t *req,
897897
break;
898898
case MODBUS_FC_WRITE_MULTIPLE_COILS: {
899899
int nb = (req[offset + 3] << 8) + req[offset + 4];
900+
int nb_bits = req[offset + 5];
900901
int mapping_address = address - mb_mapping->start_bits;
901902

902-
if (nb < 1 || MODBUS_MAX_WRITE_BITS < nb) {
903+
if (nb < 1 || MODBUS_MAX_WRITE_BITS < nb || nb_bits * 8 < nb) {
903904
/* May be the indication has been truncated on reading because of
904905
* invalid address (eg. nb is 0 but the request contains values to
905906
* write) so it's necessary to flush. */
@@ -928,9 +929,10 @@ int modbus_reply(modbus_t *ctx, const uint8_t *req,
928929
break;
929930
case MODBUS_FC_WRITE_MULTIPLE_REGISTERS: {
930931
int nb = (req[offset + 3] << 8) + req[offset + 4];
932+
int nb_bytes = req[offset + 5];
931933
int mapping_address = address - mb_mapping->start_registers;
932934

933-
if (nb < 1 || MODBUS_MAX_WRITE_REGISTERS < nb) {
935+
if (nb < 1 || MODBUS_MAX_WRITE_REGISTERS < nb || nb_bytes * 8 < nb) {
934936
rsp_length = response_exception(
935937
ctx, &sft, MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE, rsp, TRUE,
936938
"Illegal number of values %d in write_registers (max %d)\n",
@@ -1017,7 +1019,7 @@ int modbus_reply(modbus_t *ctx, const uint8_t *req,
10171019
nb_write, nb, MODBUS_MAX_WR_WRITE_REGISTERS, MODBUS_MAX_WR_READ_REGISTERS);
10181020
} else if (mapping_address < 0 ||
10191021
(mapping_address + nb) > mb_mapping->nb_registers ||
1020-
mapping_address < 0 ||
1022+
mapping_address_write < 0 ||
10211023
(mapping_address_write + nb_write) > mb_mapping->nb_registers) {
10221024
rsp_length = response_exception(
10231025
ctx, &sft, MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS, rsp, FALSE,

0 commit comments

Comments
 (0)