diff --git a/frames/stop_waiting_frame.go b/frames/stop_waiting_frame.go index 91f937a86..5b54154ca 100644 --- a/frames/stop_waiting_frame.go +++ b/frames/stop_waiting_frame.go @@ -81,7 +81,7 @@ func ParseStopWaitingFrame(r *bytes.Reader, packetNumber protocol.PacketNumber, return nil, err } - if leastUnackedDelta > uint64(packetNumber) { + if leastUnackedDelta >= uint64(packetNumber) { return nil, qerr.Error(qerr.InvalidStopWaitingData, "invalid LeastUnackedDelta") } diff --git a/frames/stop_waiting_frame_test.go b/frames/stop_waiting_frame_test.go index b8151a28e..5a2dc2e06 100644 --- a/frames/stop_waiting_frame_test.go +++ b/frames/stop_waiting_frame_test.go @@ -18,13 +18,20 @@ var _ = Describe("StopWaitingFrame", func() { Expect(b.Len()).To(BeZero()) }) - It("rejects frames with an invalid LeastUnackedDelta", func() { + It("rejects frames that would have a negative LeastUnacked value", func() { b := bytes.NewReader([]byte{0x06, 0xD}) _, err := ParseStopWaitingFrame(b, 10, 1, protocol.VersionWhatever) Expect(err).To(HaveOccurred()) Expect(b.Len()).To(BeZero()) }) + It("rejects frames that would have 0 as LeastUnacked", func() { + b := bytes.NewReader([]byte{0x6, 0x8}) + _, err := ParseStopWaitingFrame(b, 8, 1, protocol.VersionWhatever) + Expect(err).To(HaveOccurred()) + Expect(b.Len()).To(BeZero()) + }) + It("errors on EOFs", func() { data := []byte{0x06, 0x03} _, err := ParseStopWaitingFrame(bytes.NewReader(data), 5, 1, protocol.VersionWhatever)