Skip to content

Commit 2861fca

Browse files
authored
message: fix go-fuzz crashers (#8)
1 parent 1149baf commit 2861fca

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

message.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,12 @@ func (m *Message) UnmarshalBinary(b []byte) error {
120120
return errUnalignedMessage
121121
}
122122

123+
// Don't allow misleading length
123124
m.Header.Length = Uint32(b[0:4])
125+
if int(m.Header.Length) != len(b) {
126+
return errShortMessage
127+
}
128+
124129
m.Header.Type = HeaderType(Uint16(b[4:6]))
125130
m.Header.Flags = HeaderFlags(Uint16(b[6:8]))
126131
m.Header.Sequence = Uint32(b[8:12])

message_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,16 @@ func TestMessageUnmarshal(t *testing.T) {
134134
b: make([]byte, 17),
135135
err: errUnalignedMessage,
136136
},
137+
{
138+
name: "fuzz crasher: length shorter than slice",
139+
b: []byte("\x1d000000000000000"),
140+
err: errShortMessage,
141+
},
142+
{
143+
name: "fuzz crasher: length longer than slice",
144+
b: []byte("\x13\x00\x00\x000000000000000000"),
145+
err: errShortMessage,
146+
},
137147
{
138148
name: "OK no data",
139149
b: []byte{

0 commit comments

Comments
 (0)