]> Cypherpunks repositories - gostls13.git/commitdiff
image/png: allow tRNS chunk without a PLTE chunk.
authorNigel Tao <nigeltao@golang.org>
Thu, 27 Oct 2016 02:36:48 +0000 (13:36 +1100)
committerNigel Tao <nigeltao@golang.org>
Thu, 27 Oct 2016 02:59:31 +0000 (02:59 +0000)
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>
src/image/png/reader.go

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