Fixed wrong buffer processing

This commit is contained in:
mj 2021-12-22 18:19:53 +01:00
parent c12042dd2d
commit 6bede12d21

View File

@ -263,16 +263,16 @@ static int8_t modbus_process_read_write_request(const uint8_t *buffer, int len,
/* buffer too short to contain everything we need */ /* buffer too short to contain everything we need */
return MODBUS_ERROR; return MODBUS_ERROR;
} }
transaction->register_address = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; transaction->register_address = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1];
buffer += 2; buffer += 2;
// TODO check length! // TODO check length!
if (flags & MODBUS_FLAG_WRITE) { if (flags & MODBUS_FLAG_WRITE) {
if (flags & MODBUS_FLAG_SINGLE) { if (flags & MODBUS_FLAG_SINGLE) {
transaction->holding_registers[0] = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; transaction->holding_registers[0] = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1];
buffer_pos += 2; buffer_pos += 2;
} else { } else {
/* Write multiple registers */ /* Write multiple registers */
transaction->register_count = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; transaction->register_count = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1];
buffer_pos += 2; buffer_pos += 2;
if (len < MODBUS_MINIMAL_WRITE_MULTIPLE_LEN) { if (len < MODBUS_MINIMAL_WRITE_MULTIPLE_LEN) {
return MODBUS_ERROR; return MODBUS_ERROR;
@ -286,13 +286,13 @@ static int8_t modbus_process_read_write_request(const uint8_t *buffer, int len,
return MODBUS_ERROR; return MODBUS_ERROR;
} }
for (uint8_t i = 0; i < transaction->register_count; i++) { for (uint8_t i = 0; i < transaction->register_count; i++) {
transaction->holding_registers[i] = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; transaction->holding_registers[i] = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1];
buffer_pos += 2; buffer_pos += 2;
} }
} }
} }
} else { } else {
transaction->register_count = (buffer[buffer_pos + 1] << 8) | buffer[buffer_pos + 2]; transaction->register_count = (buffer[buffer_pos] << 8) | buffer[buffer_pos + 1];
buffer_pos += 2; buffer_pos += 2;
if ( if (
transaction->register_count < 1 || transaction->register_count < 1 ||