diff options
author | Ian Lance Taylor <iant@golang.org> | 2019-09-06 18:12:46 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-09-06 18:12:46 +0000 |
commit | aa8901e9bb0399d2c16f988ba2fe46eb0c0c5d13 (patch) | |
tree | 7e63b06d1eec92beec6997c9d3ab47a5d6a835be /libgo/go/image/png | |
parent | 920ea3b8ba3164b61ac9490dfdfceb6936eda6dd (diff) | |
download | gcc-aa8901e9bb0399d2c16f988ba2fe46eb0c0c5d13.zip gcc-aa8901e9bb0399d2c16f988ba2fe46eb0c0c5d13.tar.gz gcc-aa8901e9bb0399d2c16f988ba2fe46eb0c0c5d13.tar.bz2 |
libgo: update to Go 1.13beta1 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/193497
From-SVN: r275473
Diffstat (limited to 'libgo/go/image/png')
-rw-r--r-- | libgo/go/image/png/fuzz.go | 52 | ||||
-rw-r--r-- | libgo/go/image/png/reader.go | 2 | ||||
-rw-r--r-- | libgo/go/image/png/reader_test.go | 15 | ||||
-rw-r--r-- | libgo/go/image/png/testdata/invalid-palette.png | bin | 0 -> 1122 bytes | |||
-rw-r--r-- | libgo/go/image/png/writer.go | 1 |
5 files changed, 68 insertions, 2 deletions
diff --git a/libgo/go/image/png/fuzz.go b/libgo/go/image/png/fuzz.go new file mode 100644 index 0000000..d9cb392 --- /dev/null +++ b/libgo/go/image/png/fuzz.go @@ -0,0 +1,52 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gofuzz + +package png + +import ( + "bytes" + "fmt" +) + +func Fuzz(data []byte) int { + cfg, err := DecodeConfig(bytes.NewReader(data)) + if err != nil { + return 0 + } + if cfg.Width*cfg.Height > 1e6 { + return 0 + } + img, err := Decode(bytes.NewReader(data)) + if err != nil { + return 0 + } + levels := []CompressionLevel{ + DefaultCompression, + NoCompression, + BestSpeed, + BestCompression, + } + for _, l := range levels { + var w bytes.Buffer + e := &Encoder{CompressionLevel: l} + err = e.Encode(&w, img) + if err != nil { + panic(err) + } + img1, err := Decode(&w) + if err != nil { + panic(err) + } + got := img1.Bounds() + want := img.Bounds() + if !got.Eq(want) { + fmt.Printf("bounds0: %#v\n", want) + fmt.Printf("bounds1: %#v\n", got) + panic("bounds have changed") + } + } + return 1 +} diff --git a/libgo/go/image/png/reader.go b/libgo/go/image/png/reader.go index 53fbf3e..6771973 100644 --- a/libgo/go/image/png/reader.go +++ b/libgo/go/image/png/reader.go @@ -706,7 +706,7 @@ func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image } } case cbP8: - if len(paletted.Palette) != 255 { + if len(paletted.Palette) != 256 { for x := 0; x < width; x++ { if len(paletted.Palette) <= int(cdat[x]) { paletted.Palette = paletted.Palette[:int(cdat[x])+1] diff --git a/libgo/go/image/png/reader_test.go b/libgo/go/image/png/reader_test.go index 33dcd3d..3325d2e 100644 --- a/libgo/go/image/png/reader_test.go +++ b/libgo/go/image/png/reader_test.go @@ -584,6 +584,21 @@ func TestUnknownChunkLengthUnderflow(t *testing.T) { } } +func TestPaletted8OutOfRangePixel(t *testing.T) { + // IDAT contains a reference to a palette index that does not exist in the file. + img, err := readPNG("testdata/invalid-palette.png") + if err != nil { + t.Errorf("decoding invalid-palette.png: unexpected error %v", err) + return + } + + // Expect that the palette is extended with opaque black. + want := color.RGBA{0x00, 0x00, 0x00, 0xff} + if got := img.At(15, 15); got != want { + t.Errorf("got %F %v, expected %T %v", got, got, want, want) + } +} + func TestGray8Transparent(t *testing.T) { // These bytes come from https://golang.org/issues/19553 m, err := Decode(bytes.NewReader([]byte{ diff --git a/libgo/go/image/png/testdata/invalid-palette.png b/libgo/go/image/png/testdata/invalid-palette.png Binary files differnew file mode 100644 index 0000000..a747e59 --- /dev/null +++ b/libgo/go/image/png/testdata/invalid-palette.png diff --git a/libgo/go/image/png/writer.go b/libgo/go/image/png/writer.go index c033351..2bd4fde 100644 --- a/libgo/go/image/png/writer.go +++ b/libgo/go/image/png/writer.go @@ -288,7 +288,6 @@ func filter(cr *[nFilter][]byte, pr []byte, bpp int) int { } } if sum < best { - best = sum filter = ftAverage } |