Add some fuzzing in peer_protocol
This commit is contained in:
parent
6156aebf71
commit
1b66994c0a
|
@ -0,0 +1,23 @@
|
||||||
|
package peer_protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FuzzDecoder(f *testing.F) {
|
||||||
|
f.Add([]byte("\x00\x00\x00\x00"))
|
||||||
|
f.Add([]byte("\x00\x00\x00\x01\x00"))
|
||||||
|
f.Add([]byte("\x00\x00\x00\x03\x14\x00"))
|
||||||
|
f.Fuzz(func(t *testing.T, b []byte) {
|
||||||
|
d := Decoder{
|
||||||
|
R: bufio.NewReader(bytes.NewReader(b)),
|
||||||
|
}
|
||||||
|
var m Message
|
||||||
|
err := d.Decode(&m)
|
||||||
|
if err != nil {
|
||||||
|
t.Skip(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
|
@ -31,3 +31,8 @@ const (
|
||||||
|
|
||||||
ExtensionDeleteNumber ExtensionNumber = 0
|
ExtensionDeleteNumber ExtensionNumber = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (me *ExtensionNumber) UnmarshalBinary(b []byte) error {
|
||||||
|
*me = ExtensionNumber(b[0])
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package peer_protocol
|
package peer_protocol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
@ -11,6 +12,10 @@ func (i *Integer) Read(r io.Reader) error {
|
||||||
return binary.Read(r, binary.BigEndian, i)
|
return binary.Read(r, binary.BigEndian, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *Integer) UnmarshalBinary(b []byte) error {
|
||||||
|
return i.Read(bytes.NewReader(b))
|
||||||
|
}
|
||||||
|
|
||||||
// It's perfectly fine to cast these to an int. TODO: Or is it?
|
// It's perfectly fine to cast these to an int. TODO: Or is it?
|
||||||
func (i Integer) Int() int {
|
func (i Integer) Int() int {
|
||||||
return int(i)
|
return int(i)
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package peer_protocol
|
package peer_protocol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
@ -19,6 +21,11 @@ type Message struct {
|
||||||
Port uint16
|
Port uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ interface {
|
||||||
|
encoding.BinaryUnmarshaler
|
||||||
|
encoding.BinaryMarshaler
|
||||||
|
} = (*Message)(nil)
|
||||||
|
|
||||||
func MakeCancelMessage(piece, offset, length Integer) Message {
|
func MakeCancelMessage(piece, offset, length Integer) Message {
|
||||||
return Message{
|
return Message{
|
||||||
Type: Cancel,
|
Type: Cancel,
|
||||||
|
@ -116,3 +123,17 @@ func marshalBitfield(bf []bool) (b []byte) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (me *Message) UnmarshalBinary(b []byte) error {
|
||||||
|
d := Decoder{
|
||||||
|
R: bufio.NewReader(bytes.NewReader(b)),
|
||||||
|
}
|
||||||
|
err := d.Decode(me)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if d.R.Buffered() != 0 {
|
||||||
|
return fmt.Errorf("%d trailing bytes", d.R.Buffered())
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package peer_protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
qt "github.com/frankban/quicktest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FuzzMessageMarshalBinary(f *testing.F) {
|
||||||
|
f.Fuzz(func(t *testing.T, b []byte) {
|
||||||
|
var m Message
|
||||||
|
if err := m.UnmarshalBinary(b); err != nil {
|
||||||
|
t.Skip(err)
|
||||||
|
}
|
||||||
|
b0 := m.MustMarshalBinary()
|
||||||
|
qt.Assert(t, b0, qt.DeepEquals, b)
|
||||||
|
})
|
||||||
|
}
|
|
@ -12,6 +12,11 @@ func (mt MessageType) FastExtension() bool {
|
||||||
return mt >= Suggest && mt <= AllowedFast
|
return mt >= Suggest && mt <= AllowedFast
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (mt *MessageType) UnmarshalBinary(b []byte) error {
|
||||||
|
*mt = MessageType(b[0])
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// BEP 3
|
// BEP 3
|
||||||
Choke MessageType = 0
|
Choke MessageType = 0
|
||||||
|
|
Loading…
Reference in New Issue