]> Cypherpunks repositories - gostls13.git/commitdiff
image/png: allow both PLTE and tRNS chunks for TrueColor
authorNigel Tao <nigeltao@golang.org>
Fri, 19 Aug 2022 06:01:33 +0000 (16:01 +1000)
committerGopher Robot <gobot@golang.org>
Mon, 29 Aug 2022 15:11:31 +0000 (15:11 +0000)
Prior to this commit, png.Decode would allow TrueColor PNG images that
have one but not both of PLTE and tRNS chunks.

Fixes #54142

Change-Id: I259c1fff86a0aa5640dbadf7ad834e05fbd1430c
Reviewed-on: https://go-review.googlesource.com/c/go/+/424916
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Nigel Tao (INACTIVE; USE @golang.org INSTEAD) <nigeltao@google.com>
src/image/png/reader.go

index b608bec2ef0a1effd1199337d38f6e8a96fe404c..3a717344c27998f989fcaa47a4c282685ae23629 100644 (file)
@@ -51,6 +51,10 @@ func cbPaletted(cb int) bool {
        return cbP1 <= cb && cb <= cbP8
 }
 
+func cbTrueColor(cb int) bool {
+       return cb == cbTC8 || cb == cbTC16
+}
+
 // Filter type, as per the PNG spec.
 const (
        ftNone    = 0
@@ -898,6 +902,10 @@ func (d *decoder) parseChunk(configOnly bool) error {
                        if d.stage != dsSeenPLTE {
                                return chunkOrderError
                        }
+               } else if cbTrueColor(d.cb) {
+                       if d.stage != dsSeenIHDR && d.stage != dsSeenPLTE {
+                               return chunkOrderError
+                       }
                } else if d.stage != dsSeenIHDR {
                        return chunkOrderError
                }