Skip to content

Commit

Permalink
reject TIFF images with unsorted IFD tags.
Browse files Browse the repository at this point in the history
The spec says that these images are invalid.

Fixes golang/go#10549
  • Loading branch information
chai2010 committed Apr 30, 2015
1 parent de4394a commit 1b857c8
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions tiff_ifd.go
Expand Up @@ -64,12 +64,19 @@ func readIFD(r io.ReadSeeker, h *Header, offset int64) (p *IFD, err error) {
if err = binary.Read(r, h.ByteOrder, &entryNum); err != nil {
return
}

var prevTag TagType
for i := 0; i < int(entryNum); i++ {
var entry *IFDEntry
if entry, err = readIFDEntry(r, h); err != nil {
return
}
if entry.Tag <= prevTag {
err = fmt.Errorf("tiff: readIFD, tags are not sorted in ascending order")
return
}
p.EntryMap[entry.Tag] = entry
prevTag = entry.Tag
}
var nextIfdOffset uint32
if err = binary.Read(r, h.ByteOrder, &nextIfdOffset); err != nil {
Expand Down Expand Up @@ -105,12 +112,19 @@ func readIFD8(r io.ReadSeeker, h *Header, offset int64) (p *IFD, err error) {
if err = binary.Read(r, h.ByteOrder, &entryNum); err != nil {
return
}

var prevTag TagType
for i := 0; i < int(entryNum); i++ {
var entry *IFDEntry
if entry, err = readIFDEntry8(r, h); err != nil {
return
}
if entry.Tag <= prevTag {
err = fmt.Errorf("tiff: readIFD8, tags are not sorted in ascending order")
return
}
p.EntryMap[entry.Tag] = entry
prevTag = entry.Tag
}
var nextIfdOffset uint64
if err = binary.Read(r, h.ByteOrder, &nextIfdOffset); err != nil {
Expand Down

0 comments on commit 1b857c8

Please sign in to comment.