1
0
mirror of https://github.com/golang/go synced 2024-09-30 13:28:38 -06:00

image/png: allow tRNS chunk without a PLTE chunk.

While https://www.w3.org/TR/PNG/#5ChunkOrdering says that tRNS's
ordering constraint is "After PLTE; before IDAT", it is legal for a tRNS
chunk to occur without a PLTE chunk at all, for greyscale and truecolor
transparency as opposed to palette-based transparency. See
https://www.w3.org/TR/PNG/#11transinfo

Fixes #17511.

Change-Id: I047b0b01d78a1cda65e00eeac229bb972cda431d
Reviewed-on: https://go-review.googlesource.com/32139
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
Nigel Tao 2016-10-27 13:36:48 +11:00
parent 645e984f39
commit de4b065591

View File

@ -709,7 +709,11 @@ func (d *decoder) parseChunk() error {
d.stage = dsSeenPLTE d.stage = dsSeenPLTE
return d.parsePLTE(length) return d.parsePLTE(length)
case "tRNS": case "tRNS":
if d.stage != dsSeenPLTE { if cbPaletted(d.cb) {
if d.stage != dsSeenPLTE {
return chunkOrderError
}
} else if d.stage != dsSeenIHDR {
return chunkOrderError return chunkOrderError
} }
d.stage = dsSeentRNS d.stage = dsSeentRNS