mirror of
https://github.com/golang/go
synced 2024-11-21 13:54:43 -07:00
image/tiff: Do not panic when RowsPerStrip is missing.
The RowsPerStrip tag is mandatory according to the spec. However, Mac OS sometimes (?) omits it. I managed to create such an image by applying "tiffutil -none" on a compressed image. If RowsPerStrip is 0, there was a division by zero in the decoder. Assume that the image is a single strip in this case. R=nigeltao, bradfitz CC=golang-dev https://golang.org/cl/4815061
This commit is contained in:
parent
890bdc5339
commit
a65f4ccb89
@ -362,6 +362,10 @@ func Decode(r io.Reader) (img image.Image, err os.Error) {
|
||||
|
||||
// Check if we have the right number of strips, offsets and counts.
|
||||
rps := int(d.firstVal(tRowsPerStrip))
|
||||
if rps == 0 {
|
||||
// Assume only one strip.
|
||||
rps = d.config.Height
|
||||
}
|
||||
numStrips := (d.config.Height + rps - 1) / rps
|
||||
if rps == 0 || len(d.features[tStripOffsets]) < numStrips || len(d.features[tStripByteCounts]) < numStrips {
|
||||
return nil, FormatError("inconsistent header")
|
||||
|
25
src/pkg/image/tiff/reader_test.go
Normal file
25
src/pkg/image/tiff/reader_test.go
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright 2011 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.
|
||||
|
||||
package tiff
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestNoRPS tries to decode an image that has no RowsPerStrip tag.
|
||||
// The tag is mandatory according to the spec but some software omits
|
||||
// it in the case of a single strip.
|
||||
func TestNoRPS(t *testing.T) {
|
||||
f, err := os.Open("testdata/no_rps.tiff")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
_, err = Decode(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
BIN
src/pkg/image/tiff/testdata/no_rps.tiff
vendored
Normal file
BIN
src/pkg/image/tiff/testdata/no_rps.tiff
vendored
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user