diff --git a/frame_sorter.go b/frame_sorter.go index 609c35dd7..fa5ee884b 100644 --- a/frame_sorter.go +++ b/frame_sorter.go @@ -37,14 +37,11 @@ func (s *frameSorter) push(data []byte, offset protocol.ByteCount) error { return nil } - var wasCut bool if oldData, ok := s.queue[offset]; ok { if len(data) <= len(oldData) { return errDuplicateStreamData } - data = data[len(oldData):] - offset += protocol.ByteCount(len(oldData)) - wasCut = true + s.queue[offset] = data } start := offset @@ -66,6 +63,7 @@ func (s *frameSorter) push(data []byte, offset protocol.ByteCount) error { return errors.New("StreamFrameSorter BUG: no gap found") } + var wasCut bool if start < gap.Value.Start { add := gap.Value.Start - start offset += add diff --git a/frame_sorter_test.go b/frame_sorter_test.go index 113b10319..2dfcf7704 100644 --- a/frame_sorter_test.go +++ b/frame_sorter_test.go @@ -9,14 +9,14 @@ import ( . "github.com/onsi/gomega" ) -var _ = Describe("STREAM frame sorter", func() { +var _ = Describe("frame sorter", func() { var s *frameSorter checkGaps := func(expectedGaps []utils.ByteInterval) { - Expect(s.gaps.Len()).To(Equal(len(expectedGaps))) + ExpectWithOffset(1, s.gaps.Len()).To(Equal(len(expectedGaps))) var i int for gap := s.gaps.Front(); gap != nil; gap = gap.Next() { - Expect(gap.Value).To(Equal(expectedGaps[i])) + ExpectWithOffset(1, gap.Value).To(Equal(expectedGaps[i])) i++ } } @@ -231,6 +231,7 @@ var _ = Describe("STREAM frame sorter", func() { Expect(s.Push([]byte("123456789012345"), 2)).To(Succeed()) Expect(s.queue).ToNot(HaveKey(protocol.ByteCount(5))) Expect(s.queue).To(HaveKey(protocol.ByteCount(2))) + Expect(s.queue).To(HaveKey(protocol.ByteCount(15))) Expect(s.queue[2]).To(Equal([]byte("1234567890123"))) Expect(s.queue[2]).To(HaveCap(13)) checkGaps([]utils.ByteInterval{ @@ -244,8 +245,8 @@ var _ = Describe("STREAM frame sorter", func() { // 5 to 22 Expect(s.Push([]byte("12345678901234567"), 5)).To(Succeed()) Expect(s.queue).To(HaveKey(protocol.ByteCount(5))) + Expect(s.queue).ToNot(HaveKey(protocol.ByteCount(10))) Expect(s.queue).ToNot(HaveKey(protocol.ByteCount(15))) - Expect(s.queue[10]).To(Equal([]byte("678901234567"))) checkGaps([]utils.ByteInterval{ {Start: 0, End: 5}, {Start: 22, End: 25}, @@ -272,11 +273,11 @@ var _ = Describe("STREAM frame sorter", func() { // 5 to 27 Expect(s.Push(bytes.Repeat([]byte{'d'}, 22), 5)).To(Succeed()) Expect(s.queue).To(HaveKey(protocol.ByteCount(5))) + Expect(s.queue).ToNot(HaveKey(protocol.ByteCount(10))) Expect(s.queue).ToNot(HaveKey(protocol.ByteCount(15))) Expect(s.queue).To(HaveKey(protocol.ByteCount(25))) - Expect(s.queue).To(HaveKey(protocol.ByteCount(10))) - Expect(s.queue[10]).To(Equal(bytes.Repeat([]byte{'d'}, 15))) - Expect(s.queue[10]).To(HaveCap(15)) + Expect(s.queue[5]).To(Equal(bytes.Repeat([]byte{'d'}, 20))) + Expect(s.queue[5]).To(HaveCap(20)) checkGaps([]utils.ByteInterval{ {Start: 0, End: 5}, {Start: 30, End: protocol.MaxByteCount},