From 99517c3ae0ec7ef29622717b3d1c86353814df76 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Mon, 17 Aug 2015 22:50:33 +0200 Subject: [PATCH 1/2] Fix crashers found by go-fuzz --- color.go | 4 ++++ group.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/color.go b/color.go index db2ed6d..40e3fc1 100755 --- a/color.go +++ b/color.go @@ -56,6 +56,10 @@ func (color *Color) readNameLen(r io.Reader) error { // Decode the color's name. func (color *Color) readName(r io.Reader) (err error) { + if color.nameLen == 0 { + return + } + // make array for our color name based on block length name := make([]uint16, color.nameLen) // assumes the nameLen was already defined. if err = binary.Read(r, binary.BigEndian, &name); err != nil { diff --git a/group.go b/group.go index 3ad1a24..e44bdcb 100755 --- a/group.go +++ b/group.go @@ -29,6 +29,10 @@ func (group *Group) readNameLen(r io.Reader) error { // Decode a group's name. func (group *Group) readName(r io.Reader) (err error) { + if group.nameLen == 0 { + return + } + // make array for our color name based on block length name := make([]uint16, group.nameLen) if err = binary.Read(r, binary.BigEndian, &name); err != nil { From ebaaab063b441d79b28c40a4da498698d650c807 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Mon, 17 Aug 2015 22:50:56 +0200 Subject: [PATCH 2/2] Add fuzzing framework and crashers --- fuzz.go | 14 ++++++++++++++ fuzz_test.go | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 fuzz.go create mode 100644 fuzz_test.go diff --git a/fuzz.go b/fuzz.go new file mode 100644 index 0000000..37d131f --- /dev/null +++ b/fuzz.go @@ -0,0 +1,14 @@ +// +build gofuzz + +package ase + +import "bytes" + +func Fuzz(data []byte) int { + + if _, err := Decode(bytes.NewReader(data)); err != nil { + return 0 + } + + return 1 +} diff --git a/fuzz_test.go b/fuzz_test.go new file mode 100644 index 0000000..7cdbecc --- /dev/null +++ b/fuzz_test.go @@ -0,0 +1,18 @@ +package ase + +import ( + "strings" + "testing" +) + +func TestFuzzCrashers(t *testing.T) { + + var crashers = []string{ + "ASEF\x00\x01000000\xc0\x010000\x00\x00", + "ASEF00\x00\x000000\x00\x010000\x00\x00", + } + + for _, f := range crashers { + Decode(strings.NewReader(f)) + } +}