Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.6.1, 5.7.0
-
None
-
OS: Ubuntu 15.10, Windows 7.
Qt: 5.7.0, opensource.
-
1683fc48e1ee63c9e5687bcdf55d45bcafe8e6f8
Description
Problem in file qmodbuspdu.cpp, QModbusResponse::calculateDataSize.
case QModbusResponse::ReadCoils: case QModbusResponse::ReadDiscreteInputs: case QModbusResponse::ReadHoldingRegisters: case QModbusResponse::ReadInputRegisters: case QModbusResponse::GetCommEventLog: case QModbusResponse::ReadFileRecord: case QModbusResponse::WriteFileRecord: case QModbusResponse::ReadWriteMultipleRegisters: case QModbusResponse::ReportServerId: if (response.dataSize() >= 1) size = 1 /*byte count*/ + response.data()[0] /*actual bytes*/; break;
64 registers is 128 bytes, but response.data() is QByteArray. QByteArray use (signed) char. Modbus use unsigned char for data size. 128 (unsigned char) == -128 (signed char, cast to int). Size calculation is incorrect.
Solution variant:
size = 1 /*byte count*/ + static_cast<quint8>(response.data()[0]) /*actual bytes*/;
Attachments
For Gerrit Dashboard: QTBUG-54834 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
174519,5 | Fix handling of byte count fields | 5.6 | qt/qtserialbus | Status: MERGED | +2 | 0 |
175184,1 | Add Tests for "Fix handling of byte count fields" | 5.7 | qt/qtserialbus | Status: ABANDONED | +2 | 0 |