commit 515e5ffe955010e2d37bd28886d73f12ae59cc57
parent 9881b32bd1cda8b6dac428b03eadedeb276baadf
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date: Thu, 19 Oct 2023 16:45:45 +0800
webp/encode: fuzz test
Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Diffstat:
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/webp/encode.go b/webp/encode.go
@@ -24,6 +24,12 @@ type EncodeOption func(*Encoder)
// Quality in the range (0,1].
func Quality(q float32) EncodeOption {
+ if q <= 0 {
+ q = 0.1
+ }
+ if q > 1 {
+ q = 1
+ }
return func(enc *Encoder) {
enc.Quality = q
}
diff --git a/webp/webp_test.go b/webp/webp_test.go
@@ -3,6 +3,8 @@ package webp
import (
"bytes"
_ "embed"
+ "image"
+ "image/color"
"image/png"
"os"
"path/filepath"
@@ -40,3 +42,30 @@ func TestSmoke(t *testing.T) {
t.Fatalf("decoding webp: %v", err)
}
}
+
+func FuzzEncode(f *testing.F) {
+ f.Add(uint16(0), uint16(0), uint16(0), uint16(0), uint8(0), uint8(0), uint8(0), uint8(0), float32(0))
+ f.Add(uint16(0), uint16(0), uint16(1), uint16(1), uint8(1), uint8(1), uint8(1), uint8(1), float32(1))
+ f.Add(uint16(0), uint16(0), uint16(1), uint16(1), uint8(1), uint8(1), uint8(1), uint8(1), float32(0.5))
+ f.Add(uint16(0), uint16(0), uint16(100), uint16(100), uint8(100), uint8(50), uint8(50), uint8(50), float32(0.75))
+ f.Fuzz(func(t *testing.T, x0, y0, x1, y1 uint16, r, g, b, a uint8, quality float32) {
+ m := image.NewNRGBA(image.Rect(int(x0), int(y0), int(x1), int(y1)))
+ for x := x0; x < x1; x += 1 {
+ for y := y0; y < y1; y += 1 {
+ m.Set(int(x), int(y), color.RGBA{R: r, G: g, B: b, A: a})
+ }
+ }
+ if quality <= 0 || quality > 1 {
+ t.Skip()
+ return
+ }
+ if int(x1)-int(x0) <= 0 || int(y1)-int(y0) <= 0 {
+ t.Skip()
+ return
+ }
+ buf := bytes.NewBuffer(nil)
+ if err := Encode(buf, m, Quality(quality)); err != nil {
+ t.Errorf("error: %v (x0: %d, y0: %d, x1: %d, y1: %d) (r: %d, g: %d, b: %d, a: %d)", err, x0, y0, x1, y1, r, g, b, a)
+ }
+ })
+}