From: cristy Date: Sat, 7 Jun 2014 22:12:02 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2241 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c72dd365bf2a1b2909cc0ba277f715454ef97a40;p=imagemagick --- diff --git a/coders/xcf.c b/coders/xcf.c index f5266038e..511641148 100644 --- a/coders/xcf.c +++ b/coders/xcf.c @@ -461,123 +461,111 @@ static MagickBooleanType load_tile_rle(Image *image,Image *tile_image, length=(size_t) ((*xcfdata << 8) + xcfdata[1]); xcfdata+=2; } - size-=length; - if (size < 0) - goto bogus_rle; - if (&xcfdata[length-1] > xcfdatalimit) - goto bogus_rle; - while (length-- > 0) + size-=length; + if (size < 0) + goto bogus_rle; + if (&xcfdata[length-1] > xcfdatalimit) + goto bogus_rle; + while (length-- > 0) + { + data=(*xcfdata++); + switch (i) { - data=(*xcfdata++); - switch (i) + case 0: { - case 0: - { - if (inDocInfo->image_type != GIMP_GRAY) - { - SetPixelRed(tile_image,ScaleCharToQuantum(data),q); - SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); - SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - } - else - { - SetPixelGray(tile_image,ScaleCharToQuantum(data),q); - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - } - break; - } - case 1: - { - if (inDocInfo->image_type == GIMP_GRAY) - SetPixelGray(tile_image,ScaleCharToQuantum(data),q); - else + if (inDocInfo->image_type == GIMP_GRAY) + SetPixelGray(tile_image,ScaleCharToQuantum(data),q); + else + { + SetPixelRed(tile_image,ScaleCharToQuantum(data),q); SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); - break; - } - case 2: - { - SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); - break; - } - case 3: - { - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - break; - } + SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); + } + SetPixelAlpha(tile_image,alpha,q); + break; + } + case 1: + { + if (inDocInfo->image_type == GIMP_GRAY) + SetPixelAlpha(tile_image,ScaleCharToQuantum(data),q); + else + SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); + break; + } + case 2: + { + SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); + break; + } + case 3: + { + SetPixelAlpha(tile_image,ScaleCharToQuantum(data),q); + break; } - q+=GetPixelChannels(tile_image); } + q+=GetPixelChannels(tile_image); } - else + } + else + { + length+=1; + if (length == 128) + { + if (xcfdata >= xcfdatalimit) + goto bogus_rle; + length=(size_t) ((*xcfdata << 8) + xcfdata[1]); + xcfdata+=2; + } + size-=length; + if (size < 0) + goto bogus_rle; + if (xcfdata > xcfdatalimit) + goto bogus_rle; + pixel=(*xcfdata++); + for (j=0; j < (ssize_t) length; j++) { - length+=1; - if (length == 128) - { - if (xcfdata >= xcfdatalimit) - goto bogus_rle; - length=(size_t) ((*xcfdata << 8) + xcfdata[1]); - xcfdata+=2; - } - size-=length; - if (size < 0) - goto bogus_rle; - if (xcfdata > xcfdatalimit) - goto bogus_rle; - pixel=(*xcfdata++); - for (j=0; j < (ssize_t) length; j++) + data=pixel; + switch (i) { - data=pixel; - switch (i) + case 0: { - case 0: - { - if (inDocInfo->image_type != GIMP_GRAY) - { - SetPixelRed(tile_image,ScaleCharToQuantum(data),q); - SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); - SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - } - else - { - SetPixelGray(tile_image,ScaleCharToQuantum(data),q); - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - } - break; - } - case 1: - { - if (inDocInfo->image_type == GIMP_GRAY) - SetPixelGray(tile_image,ScaleCharToQuantum(data),q); - else + if (inDocInfo->image_type == GIMP_GRAY) + SetPixelGray(tile_image,ScaleCharToQuantum(data),q); + else + { + SetPixelRed(tile_image,ScaleCharToQuantum(data),q); SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); - break; - } - case 2: - { - SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); - break; - } - case 3: - { - SetPixelAlpha(tile_image,data == 255U ? alpha : - ScaleCharToQuantum(data),q); - break; - } + SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); + } + SetPixelAlpha(tile_image,alpha,q); + break; + } + case 1: + { + if (inDocInfo->image_type == GIMP_GRAY) + SetPixelAlpha(tile_image,ScaleCharToQuantum(data),q); + else + SetPixelGreen(tile_image,ScaleCharToQuantum(data),q); + break; + } + case 2: + { + SetPixelBlue(tile_image,ScaleCharToQuantum(data),q); + break; + } + case 3: + { + SetPixelAlpha(tile_image,ScaleCharToQuantum(data),q); + break; } - q+=GetPixelChannels(tile_image); } + q+=GetPixelChannels(tile_image); } - } - if (SyncAuthenticPixels(tile_image,exception) == MagickFalse) - break; + } } + if (SyncAuthenticPixels(tile_image,exception) == MagickFalse) + break; + } xcfodata=(unsigned char *) RelinquishMagickMemory(xcfodata); return(MagickTrue);