]> Sergey Matveev's repositories - btrtrc.git/commitdiff
peer_protocol: Add a test for receiving overlong piece data
authorMatt Joiner <anacrolix@gmail.com>
Sat, 14 Jul 2018 01:37:56 +0000 (11:37 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 14 Jul 2018 01:37:56 +0000 (11:37 +1000)
The chunk buffer pool decides the upper bound on chunk data len.

peer_protocol/decoder_test.go

index 5dfd09c5ec80f5e2c407d42cdb1ade402f310412..bbd8194d03e686965430555c6b990cacce67c05f 100644 (file)
@@ -73,3 +73,21 @@ func TestDecodeShortPieceEOF(t *testing.T) {
        assert.Len(t, m.Piece, 1)
        assert.Equal(t, io.EOF, d.Decode(&m))
 }
+
+func TestDecodeOverlongPiece(t *testing.T) {
+       r, w := io.Pipe()
+       go func() {
+               w.Write(Message{Type: Piece, Piece: make([]byte, 3)}.MustMarshalBinary())
+               w.Close()
+       }()
+       d := Decoder{
+               R:         bufio.NewReader(r),
+               MaxLength: 1 << 15,
+               Pool: &sync.Pool{New: func() interface{} {
+                       b := make([]byte, 2)
+                       return &b
+               }},
+       }
+       var m Message
+       require.EqualError(t, d.Decode(&m), "piece data longer than expected")
+}