From: Cristy Date: Sun, 8 May 2016 16:26:06 +0000 (-0400) Subject: Check return status of Zip-compression X-Git-Tag: 7.0.1-3~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=892e4e50baddfd88ec127f43bcc8f2d337fe4834;p=imagemagick Check return status of Zip-compression --- diff --git a/coders/mat.c b/coders/mat.c index 9dd1b277c..b72689af2 100644 --- a/coders/mat.c +++ b/coders/mat.c @@ -484,6 +484,7 @@ size_t extent; int file; int status; +int zip_status; if(clone_info==NULL) return NULL; if(clone_info->file) /* Close file opened from previous transaction. */ @@ -510,14 +511,22 @@ int status; { RelinquishMagickMemory(CacheBlock); RelinquishMagickMemory(DecompressBlock); - (void) LogMagickEvent(CoderEvent,GetMagickModule(),"Gannot create file stream for PS image"); + (void) LogMagickEvent(CoderEvent,GetMagickModule(),"Cannot create file stream for PS image"); return NULL; } zip_info.zalloc=AcquireZIPMemory; zip_info.zfree=RelinquishZIPMemory; zip_info.opaque = (voidpf) NULL; - inflateInit(&zip_info); + zip_status = inflateInit(&zip_info); + if (zip_status != Z_OK) + { + RelinquishMagickMemory(CacheBlock); + RelinquishMagickMemory(DecompressBlock); + (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError, + "UnableToUncompressImage","`%s'",clone_info->filename); + return NULL; + } /* zip_info.next_out = 8*4;*/ zip_info.avail_in = 0; @@ -532,12 +541,16 @@ int status; { zip_info.avail_out = 4096; zip_info.next_out = (Bytef *) DecompressBlock; - status = inflate(&zip_info,Z_NO_FLUSH); + zip_status = inflate(&zip_info,Z_NO_FLUSH); + if ((zip_status != Z_OK) && (zip_status != Z_STREAM_END)) + break; extent=fwrite(DecompressBlock, 4096-zip_info.avail_out, 1, mat_file); (void) extent; - if(status == Z_STREAM_END) goto DblBreak; + if(zip_status == Z_STREAM_END) goto DblBreak; } + if ((zip_status != Z_OK) && (zip_status != Z_STREAM_END)) + break; Size -= magick_size; }