Skip to content

Commit 9431085

Browse files
authored
Add test for packet read io error (#94)
1 parent 39b4b5c commit 9431085

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

serve.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func readPacket(r io.Reader) (packetType, byte, []byte, error) {
2828
var remainingLength int
2929
for shift := uint(0); ; shift += 7 {
3030
remainingLength |= (int(buf[1]) & 0x7F) << shift
31-
if !(buf[1]&0x80 != 0) {
31+
if buf[1]&0x80 == 0 {
3232
break
3333
}
3434
if _, err := io.ReadFull(r, buf[1:]); err != nil {

serve_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
package mqtt
1616

1717
import (
18+
"bytes"
1819
"context"
20+
"io"
1921
"net"
2022
"testing"
2123
"time"
@@ -116,3 +118,24 @@ func TestServeParseError(t *testing.T) {
116118
})
117119
}
118120
}
121+
122+
func TestReadPacketError(t *testing.T) {
123+
pkt := []byte{0x10, 0x80, 0x01}
124+
pkt = append(pkt, make([]byte, 128)...)
125+
126+
// Ensure full packet doesn't error
127+
_, _, _, err := readPacket(bytes.NewReader(pkt))
128+
if err != nil {
129+
t.Fatalf("Unexpected error: '%v'", err)
130+
}
131+
132+
for i := 1; i < len(pkt)-1; i++ {
133+
_, _, _, err := readPacket(bytes.NewReader(pkt[:i]))
134+
if err != io.ErrUnexpectedEOF && err != io.EOF {
135+
t.Fatalf(
136+
"Expected error for %d: '%v' or %v'', got: '%v'",
137+
i, io.ErrUnexpectedEOF, io.EOF, err,
138+
)
139+
}
140+
}
141+
}

0 commit comments

Comments
 (0)