From ec9caad55e65fc404ff3e89e0fa40fd73f2b84d1 Mon Sep 17 00:00:00 2001 From: AdamKorcz <44787359+AdamKorcz@users.noreply.github.com> Date: Mon, 24 Oct 2022 14:00:27 +0100 Subject: [PATCH] golang: refactor encoding fuzzer (#8841) Signed-off-by: AdamKorcz Signed-off-by: AdamKorcz --- projects/golang/encoding_fuzzer.go | 31 +++++++++++++----------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/projects/golang/encoding_fuzzer.go b/projects/golang/encoding_fuzzer.go index 2f2c01656..14b53cd42 100644 --- a/projects/golang/encoding_fuzzer.go +++ b/projects/golang/encoding_fuzzer.go @@ -7,7 +7,6 @@ import ( "encoding/gob" "encoding/json" "encoding/xml" - "runtime" fuzz "github.com/AdaLogics/go-fuzz-headers" ) @@ -21,16 +20,7 @@ func FuzzEncoding(data []byte) int { if err != nil { return 0 } - b2, err := f.GetBytes() - if err != nil { - return 0 - } - defer func() { - if r := recover(); r != nil { - } - runtime.GC() - }() - switch decType%5 { + switch decType % 5 { case 0: e, err := f.GetString() if err != nil || len(e) != 32 { @@ -38,8 +28,8 @@ func FuzzEncoding(data []byte) int { } enc := base32.NewEncoding(e) d := base32.NewDecoder(enc, bytes.NewReader(b1)) - _, _ = d.Read(b2) - return 1 + dbuf := make([]byte, enc.DecodedLen(len(e))) + _, _ = d.Read(dbuf) case 1: e, err := f.GetString() if err != nil || len(e) != 64 { @@ -52,20 +42,25 @@ func FuzzEncoding(data []byte) int { } enc := base64.NewEncoding(e) d := base64.NewDecoder(enc, bytes.NewReader(b1)) - _, _ = d.Read(b2) - return 1 + dbuf := make([]byte, enc.DecodedLen(len(e))) + _, _ = d.Read(dbuf) case 2: + b2, err := f.GetBytes() + if err != nil { + return 0 + } d := gob.NewDecoder(bytes.NewReader(b1)) _ = d.Decode(b2) - return 1 case 3: + b2, err := f.GetBytes() + if err != nil { + return 0 + } d := json.NewDecoder(bytes.NewReader(b1)) _ = d.Decode(b2) - return 1 case 4: d := xml.NewDecoder(bytes.NewReader(b1)) _, _ = d.Token() - return 1 } return 1 }