From 671c8da0980947268b10037ad1a4960a0b77c886 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Thu, 15 Mar 2012 09:54:26 +0000 Subject: [PATCH] better behaviour for malformed PNGs thanks Nicolas --- libvips/foreign/vipspng.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libvips/foreign/vipspng.c b/libvips/foreign/vipspng.c index 73568c1e..c45bd5e8 100644 --- a/libvips/foreign/vipspng.c +++ b/libvips/foreign/vipspng.c @@ -69,8 +69,8 @@ */ /* - */ #define DEBUG + */ #ifdef HAVE_CONFIG_H #include @@ -251,13 +251,24 @@ png2vips_header( Read *read, VipsImage *out ) interpretation = VIPS_INTERPRETATION_sRGB; } - /* Expand palette images, expand transparency too. + /* Expand palette images. */ if( color_type == PNG_COLOR_TYPE_PALETTE ) png_set_palette_to_rgb( read->pPng ); - if( png_get_valid( read->pPng, read->pInfo, PNG_INFO_tRNS ) ) + + /* Expand transparency images too. + */ + if( png_get_valid( read->pPng, read->pInfo, PNG_INFO_tRNS ) ) { png_set_tRNS_to_alpha( read->pPng ); + /* Some PNGs have an alpha but do not set color_type correctly + * .. make sure we add space for an alpha. + */ + if( color_type == PNG_COLOR_TYPE_GRAY || + color_type == PNG_COLOR_TYPE_RGB ) + bands += 1; + } + /* Expand <8 bit images to full bytes. */ if( color_type == PNG_COLOR_TYPE_GRAY &&