]> Cypherpunks repositories - gostls13.git/commit
image/png: degrade gracefully for palette index values that aren't
authorNigel Tao <nigeltao@golang.org>
Thu, 1 Nov 2012 00:46:06 +0000 (11:46 +1100)
committerNigel Tao <nigeltao@golang.org>
Thu, 1 Nov 2012 00:46:06 +0000 (11:46 +1100)
commitde6bf20496e31c8126f9df9e2b051d87cca15357
tree35631d206278990ffe4b137df1a0ca5fc4d972cd
parent15e50d7c7a8d77b8c852e5bcd4829b791ab1dfa1
image/png: degrade gracefully for palette index values that aren't
defined by the PLTE chunk. Such pixels decode to opaque black,
which matches what libpng does.

Fixes #4319.

On my reading, the PNG spec isn't clear whether palette index values
outside of those defined by the PLTE chunk is an error, and if not,
what to do.

Libpng 1.5.3 falls back to opaque black. png_set_PLTE says:

/* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
 * of num_palette entries, in case of an invalid PNG file that has
 * too-large sample values.
 */
png_ptr->palette = (png_colorp)png_calloc(png_ptr,
        PNG_MAX_PALETTE_LENGTH * png_sizeof(png_color));

ImageMagick 6.5.7 returns an error:

$ convert -version
Version: ImageMagick 6.5.7-8 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC
Features: OpenMP
$ convert packetloss.png x.bmp
convert: Invalid colormap index `packetloss.png' @ image.c/SyncImage/3849.

R=r
CC=golang-dev
https://golang.org/cl/6822065
src/pkg/image/png/reader.go