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
This commit is contained in:
Benny Siegert 2011-05-12 22:34:48 -04:00 committed by Russ Cox
parent f4e5f364c7
commit 14c59abd76
2 changed files with 15 additions and 0 deletions

View File

@ -54,6 +54,7 @@ const (
tPredictor = 317
tColorMap = 320
tExtraSamples = 338
tSampleFormat = 339
)
// Compression types (defined in various places in the spec and supplements).

View File

@ -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
}