mirror of
https://github.com/golang/go
synced 2024-11-18 10:04:43 -07: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:
parent
645e984f39
commit
de4b065591
@ -709,9 +709,13 @@ func (d *decoder) parseChunk() error {
|
|||||||
d.stage = dsSeenPLTE
|
d.stage = dsSeenPLTE
|
||||||
return d.parsePLTE(length)
|
return d.parsePLTE(length)
|
||||||
case "tRNS":
|
case "tRNS":
|
||||||
|
if cbPaletted(d.cb) {
|
||||||
if d.stage != dsSeenPLTE {
|
if d.stage != dsSeenPLTE {
|
||||||
return chunkOrderError
|
return chunkOrderError
|
||||||
}
|
}
|
||||||
|
} else if d.stage != dsSeenIHDR {
|
||||||
|
return chunkOrderError
|
||||||
|
}
|
||||||
d.stage = dsSeentRNS
|
d.stage = dsSeentRNS
|
||||||
return d.parsetRNS(length)
|
return d.parsetRNS(length)
|
||||||
case "IDAT":
|
case "IDAT":
|
||||||
|
Loading…
Reference in New Issue
Block a user