Commit a65f4ccb authored by Benny Siegert's avatar Benny Siegert Committed by Nigel Tao

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
parent 890bdc53
...@@ -362,6 +362,10 @@ func Decode(r io.Reader) (img image.Image, err os.Error) { ...@@ -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. // Check if we have the right number of strips, offsets and counts.
rps := int(d.firstVal(tRowsPerStrip)) rps := int(d.firstVal(tRowsPerStrip))
if rps == 0 {
// Assume only one strip.
rps = d.config.Height
}
numStrips := (d.config.Height + rps - 1) / rps numStrips := (d.config.Height + rps - 1) / rps
if rps == 0 || len(d.features[tStripOffsets]) < numStrips || len(d.features[tStripByteCounts]) < numStrips { if rps == 0 || len(d.features[tStripOffsets]) < numStrips || len(d.features[tStripByteCounts]) < numStrips {
return nil, FormatError("inconsistent header") return nil, FormatError("inconsistent header")
......
// 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)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment