Skip to content

Commit

Permalink
Fix QoS0 packet parse (#35)
Browse files Browse the repository at this point in the history
  • Loading branch information
at-wat authored Dec 24, 2019
1 parent 23846ef commit 21e2736
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 1 deletion.
3 changes: 3 additions & 0 deletions puback.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ func (p *pktPubAck) parse(flag byte, contents []byte) (*pktPubAck, error) {
if flag != 0 {
return nil, ErrInvalidPacket
}
if len(contents) < 2 {
return nil, ErrInvalidPacketLength
}
_, p.ID = unpackUint16(contents)
return p, nil
}
3 changes: 3 additions & 0 deletions pubcomp.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ func (p *pktPubComp) parse(flag byte, contents []byte) (*pktPubComp, error) {
if flag != 0 {
return nil, ErrInvalidPacket
}
if len(contents) < 2 {
return nil, ErrInvalidPacketLength
}
_, p.ID = unpackUint16(contents)
return p, nil
}
7 changes: 6 additions & 1 deletion publish.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,12 @@ func (p *pktPublish) parse(flag byte, contents []byte) (*pktPublish, error) {
if err != nil {
return nil, err
}
nID, p.Message.ID = unpackUint16(contents[n:])
if p.Message.QoS != QoS0 {
if len(contents)-n < 2 {
return nil, ErrInvalidPacketLength
}
nID, p.Message.ID = unpackUint16(contents[n:])
}
p.Message.Payload = contents[n+nID:]

return p, nil
Expand Down
1 change: 1 addition & 0 deletions publish_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ func TestPublish_ParseError(t *testing.T) {
{0x00, []byte{0x00, 0x01, 0x61, 0x00, 0x00}, nil},
{0x00, []byte{0x00, 0x01, 0x00, 0x00, 0x00}, ErrInvalidRune},
{0x06, []byte{0x00, 0x01, 0x61, 0x00, 0x00}, ErrInvalidPacket},
{0x02, []byte{0x00, 0x01, 0x01}, ErrInvalidPacketLength},
{0x00, []byte{0x00, 0x01}, ErrInvalidPacketLength},
{0x00, []byte{0x00}, ErrInvalidPacketLength},
}
Expand Down
3 changes: 3 additions & 0 deletions pubrec.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ func (p *pktPubRec) parse(flag byte, contents []byte) (*pktPubRec, error) {
if flag != 0 {
return nil, ErrInvalidPacket
}
if len(contents) < 2 {
return nil, ErrInvalidPacketLength
}
_, p.ID = unpackUint16(contents)
return p, nil
}
3 changes: 3 additions & 0 deletions pubrel.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ func (p *pktPubRel) parse(flag byte, contents []byte) (*pktPubRel, error) {
if flag != 0x02 {
return nil, ErrInvalidPacket
}
if len(contents) < 2 {
return nil, ErrInvalidPacketLength
}
_, p.ID = unpackUint16(contents)
return p, nil
}

0 comments on commit 21e2736

Please sign in to comment.