From: Benny Siegert Date: Fri, 13 May 2011 02:34:48 +0000 (-0400) Subject: image/tiff: Reject images with SampleFormat != 1. X-Git-Tag: weekly.2011-05-22~93 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=14c59abd76a7f2bc11fcbd9009d49e9ffcd33e8e;p=gostls13.git image/tiff: Reject images with SampleFormat != 1. The TIFF spec says that a baseline TIFF reader must gracefully terminate when the image has a SampleFormat tag which it does not support. For baseline compatibility, only SampleFormat=1 (the default) is needed. Images with other sample formats (e.g. floating-point color values) are very rare in practice. R=nigeltao CC=golang-dev https://golang.org/cl/4515073 --- diff --git a/src/pkg/image/tiff/consts.go b/src/pkg/image/tiff/consts.go index 761ac9d909..169ba27721 100644 --- a/src/pkg/image/tiff/consts.go +++ b/src/pkg/image/tiff/consts.go @@ -54,6 +54,7 @@ const ( tPredictor = 317 tColorMap = 320 tExtraSamples = 338 + tSampleFormat = 339 ) // Compression types (defined in various places in the spec and supplements). diff --git a/src/pkg/image/tiff/reader.go b/src/pkg/image/tiff/reader.go index 40f659c36c..57a7be4a25 100644 --- a/src/pkg/image/tiff/reader.go +++ b/src/pkg/image/tiff/reader.go @@ -133,6 +133,20 @@ func (d *decoder) parseIFD(p []byte) os.Error { 0xffff, } } + case tSampleFormat: + // Page 27 of the spec: If the SampleFormat is present and + // the value is not 1 [= unsigned integer data], a Baseline + // TIFF reader that cannot handle the SampleFormat value + // must terminate the import process gracefully. + val, err := d.ifdUint(p) + if err != nil { + return err + } + for _, v := range val { + if v != 1 { + return UnsupportedError("sample format") + } + } } return nil }