Skip to content

Commit e184084

Browse files
committed
fix fc3 parsing at max registers (124)
1 parent 3c2ae76 commit e184084

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

packet/readholdingregistersresponse.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ func ParseReadHoldingRegistersResponseTCP(data []byte) (*ReadHoldingRegistersRes
5454
if dLen < 11 {
5555
return nil, errors.New("received data length too short to be valid packet")
5656
}
57-
byteLen := data[8]
58-
if dLen != 9+int(byteLen) {
57+
byteLen := int(data[8])
58+
if dLen != 9+byteLen {
5959
return nil, errors.New("received data length does not match byte len in packet")
6060
}
6161
return &ReadHoldingRegistersResponseTCP{

packet/readholdingregistersresponse_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ func TestReadHoldingRegistersResponseTCP_Bytes(t *testing.T) {
5353
}
5454

5555
func TestParseReadHoldingRegistersResponseTCP(t *testing.T) {
56+
max124registers := make([]byte, 248)
57+
5658
var testCases = []struct {
5759
name string
5860
given []byte
@@ -84,6 +86,21 @@ func TestParseReadHoldingRegistersResponseTCP(t *testing.T) {
8486
given: []byte{0x81, 0x80, 0x00, 0x00, 0x00, 0x05, 0x03, 0x03, 0x01, 0xCD, 0x6B},
8587
expectError: "received data length does not match byte len in packet",
8688
},
89+
{
90+
name: "ok, length is at the edge max byte/uint8 value",
91+
given: append([]byte{0x81, 0x80, 0x00, 0x00, 0x00, 0x05, 0x03, 0x03, 248}, max124registers...),
92+
expect: &ReadHoldingRegistersResponseTCP{
93+
MBAPHeader: MBAPHeader{
94+
TransactionID: 33152,
95+
ProtocolID: 0,
96+
},
97+
ReadHoldingRegistersResponse: ReadHoldingRegistersResponse{
98+
UnitID: 3,
99+
RegisterByteLen: 248,
100+
Data: max124registers,
101+
},
102+
},
103+
},
87104
}
88105

89106
for _, tc := range testCases {

0 commit comments

Comments
 (0)