tiff: do not crash when encoding with unsupported compression
tiff.Encode only supports uncompressed and deflate compression. When called
with a different compression type, it crashes with a nil pointer dereference.
Return a proper error instead.
Fixes golang/go#43137
Change-Id: I5dd9210ff0ae11b7e4f641375f26c6afc1515b98
Reviewed-on: https://go-review.googlesource.com/c/image/+/380334
Trust: Benny Siegert <bsiegert@gmail.com>
Run-TryBot: Benny Siegert <bsiegert@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/tiff/writer.go b/tiff/writer.go
index c8a01ce..4272c5a 100644
--- a/tiff/writer.go
+++ b/tiff/writer.go
@@ -8,6 +8,7 @@
"bytes"
"compress/zlib"
"encoding/binary"
+ "errors"
"image"
"io"
"sort"
@@ -338,6 +339,8 @@
}
case cDeflate:
dst = zlib.NewWriter(&buf)
+ default:
+ return errors.New("tiff: unsupported compression")
}
pr := uint32(prNone)
diff --git a/tiff/writer_test.go b/tiff/writer_test.go
index 0650df3..8f009e9 100644
--- a/tiff/writer_test.go
+++ b/tiff/writer_test.go
@@ -75,6 +75,15 @@
compare(t, m0, m1)
}
+func TestUnsupported(t *testing.T) {
+ img := image.NewGray(image.Rect(0, 0, 1, 1))
+ out := new(bytes.Buffer)
+ err := Encode(out, img, &Options{Compression: LZW})
+ if err == nil {
+ t.Error("tiff.Encode(LZW): no error returned, expected an error")
+ }
+}
+
func benchmarkEncode(b *testing.B, name string, pixelSize int) {
b.Helper()
img, err := openImage(name)