From 802ec4dc5ca2ebb14b726011682e95b4bcb12841 Mon Sep 17 00:00:00 2001 From: Cristy Date: Sat, 18 Nov 2023 16:24:25 -0500 Subject: [PATCH] improve I/O exception checking --- coders/art.c | 3 ++- coders/bgr.c | 20 +++++++++++++------- coders/cals.c | 3 ++- coders/cin.c | 3 ++- coders/cmyk.c | 30 +++++++++++++++++++----------- coders/dpx.c | 3 ++- coders/farbfeld.c | 3 ++- coders/fax.c | 3 ++- coders/fl32.c | 3 ++- coders/gray.c | 8 +++++--- coders/heic.c | 3 ++- coders/jxl.c | 3 ++- coders/map.c | 3 ++- coders/mat.c | 3 ++- coders/miff.c | 3 ++- coders/mpc.c | 3 ++- coders/pgx.c | 3 ++- coders/psd.c | 3 ++- coders/rgb.c | 22 ++++++++++++++-------- coders/sixel.c | 3 ++- coders/strimg.c | 3 ++- coders/svg.c | 3 ++- coders/tiff.c | 3 ++- coders/vips.c | 3 ++- coders/webp.c | 3 ++- coders/wpg.c | 3 ++- coders/ycbcr.c | 17 ++++++++++++----- coders/yuv.c | 15 ++++++++++----- 28 files changed, 117 insertions(+), 61 deletions(-) diff --git a/coders/art.c b/coders/art.c index 5d34454ebf..ad1ef15051 100644 --- a/coders/art.c +++ b/coders/art.c @@ -353,6 +353,7 @@ static MagickBooleanType WriteARTImage(const ImageInfo *image_info,Image *image, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/bgr.c b/coders/bgr.c index d7f728767d..33351f58c8 100644 --- a/coders/bgr.c +++ b/coders/bgr.c @@ -719,7 +719,8 @@ static Image *ReadBGRImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("G",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -790,7 +791,8 @@ static Image *ReadBGRImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("R",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -863,7 +865,8 @@ static Image *ReadBGRImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (image->alpha_trait != UndefinedPixelTrait) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -1090,7 +1093,7 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image, ExceptionInfo *exception) { MagickBooleanType - status; + status = MagickTrue; MagickOffsetType scene; @@ -1360,7 +1363,8 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("G",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1386,7 +1390,8 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("R",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1415,7 +1420,8 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image, (void) CloseBlob(image); if (quantum_type == BGRAQuantum) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); diff --git a/coders/cals.c b/coders/cals.c index 2cf42ef28a..c9a9e79eb7 100644 --- a/coders/cals.c +++ b/coders/cals.c @@ -575,7 +575,8 @@ static MagickBooleanType WriteCALSImage(const ImageInfo *image_info, if (WriteBlob(image,length,group4) != (ssize_t) length) status=MagickFalse; group4=(unsigned char *) RelinquishMagickMemory(group4); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } #endif diff --git a/coders/cin.c b/coders/cin.c index aa3ed67a6e..97a3f3ed0d 100644 --- a/coders/cin.c +++ b/coders/cin.c @@ -1229,6 +1229,7 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, break; } quantum_info=DestroyQuantumInfo(quantum_info); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/cmyk.c b/coders/cmyk.c index 190ffcab3d..0479fb3210 100644 --- a/coders/cmyk.c +++ b/coders/cmyk.c @@ -692,8 +692,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info, if (DiscardBlobBytes(image,(MagickSizeType) image->offset) == MagickFalse) { status=MagickFalse; - ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile", - image->filename); + ThrowFileException(exception,CorruptImageError, + "UnexpectedEndOfFile",image->filename); break; } length=GetQuantumExtent(canvas_image,quantum_info,CyanQuantum); @@ -761,7 +761,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("M",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -831,7 +832,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Y",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -902,7 +904,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("K",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -975,7 +978,8 @@ static Image *ReadCMYKImage(const ImageInfo *image_info, } if (image->alpha_trait != UndefinedPixelTrait) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -1195,7 +1199,7 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info, Image *image,ExceptionInfo *exception) { MagickBooleanType - status; + status = MagickTrue; MagickOffsetType scene; @@ -1486,7 +1490,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("M",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1512,7 +1517,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Y",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1538,7 +1544,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("K",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1566,7 +1573,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info, } if (quantum_type == CMYKAQuantum) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); diff --git a/coders/dpx.c b/coders/dpx.c index e377d835d9..2f3bc75db2 100644 --- a/coders/dpx.c +++ b/coders/dpx.c @@ -2071,6 +2071,7 @@ static MagickBooleanType WriteDPXImage(const ImageInfo *image_info,Image *image, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/farbfeld.c b/coders/farbfeld.c index 9e7b955259..873eb228a2 100644 --- a/coders/farbfeld.c +++ b/coders/farbfeld.c @@ -391,6 +391,7 @@ static MagickBooleanType WriteFARBFELDImage(const ImageInfo *image_info, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/fax.c b/coders/fax.c index e14295a989..b83bac5da0 100644 --- a/coders/fax.c +++ b/coders/fax.c @@ -402,6 +402,7 @@ static MagickBooleanType WriteFAXImage(const ImageInfo *image_info,Image *image, break; } while (write_info->adjoin != MagickFalse); write_info=DestroyImageInfo(write_info); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/fl32.c b/coders/fl32.c index ab964b70bc..6d71231a8c 100644 --- a/coders/fl32.c +++ b/coders/fl32.c @@ -471,6 +471,7 @@ static MagickBooleanType WriteFL32Image(const ImageInfo *image_info, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/gray.c b/coders/gray.c index b28498e18f..8f1989c06d 100644 --- a/coders/gray.c +++ b/coders/gray.c @@ -588,7 +588,8 @@ static Image *ReadGRAYImage(const ImageInfo *image_info, (void) CloseBlob(image); if (image->alpha_trait != UndefinedPixelTrait) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -806,7 +807,7 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info, Image *image,ExceptionInfo *exception) { MagickBooleanType - status; + status = MagickTrue; MagickOffsetType scene; @@ -1023,7 +1024,8 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info, (void) CloseBlob(image); if (quantum_type == GrayAlphaQuantum) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); diff --git a/coders/heic.c b/coders/heic.c index e0833edabd..4e6ec2655e 100644 --- a/coders/heic.c +++ b/coders/heic.c @@ -1372,7 +1372,8 @@ static MagickBooleanType WriteHEICImage(const ImageInfo *image_info, if (heif_image != (struct heif_image*) NULL) heif_image_release(heif_image); heif_context_free(heif_context); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } #endif diff --git a/coders/jxl.c b/coders/jxl.c index fa8a2f115d..a7f837f4f6 100644 --- a/coders/jxl.c +++ b/coders/jxl.c @@ -1195,7 +1195,8 @@ static MagickBooleanType WriteJXLImage(const ImageInfo *image_info,Image *image, JxlEncoderDestroy(jxl_info); if (jxl_status != JXL_ENC_SUCCESS) ThrowWriterException(CoderError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } #endif diff --git a/coders/map.c b/coders/map.c index 37c608ce76..29cefe961b 100644 --- a/coders/map.c +++ b/coders/map.c @@ -454,6 +454,7 @@ static MagickBooleanType WriteMAPImage(const ImageInfo *image_info,Image *image, (void) WriteBlob(image,(size_t) (q-pixels),pixels); } pixels=(unsigned char *) RelinquishMagickMemory(pixels); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/mat.c b/coders/mat.c index 4f2bf01cc9..f4ebd1e27b 100644 --- a/coders/mat.c +++ b/coders/mat.c @@ -1745,6 +1745,7 @@ static MagickBooleanType WriteMATImage(const ImageInfo *image_info,Image *image, if (status == MagickFalse) break; } while (image_info->adjoin != MagickFalse); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/miff.c b/coders/miff.c index 8e83b32d50..146c9d8ed8 100644 --- a/coders/miff.c +++ b/coders/miff.c @@ -2849,6 +2849,7 @@ static MagickBooleanType WriteMIFFImage(const ImageInfo *image_info, if (status == MagickFalse) break; } while (image_info->adjoin != MagickFalse); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/mpc.c b/coders/mpc.c index 69b6e40101..6df871ce85 100644 --- a/coders/mpc.c +++ b/coders/mpc.c @@ -1567,6 +1567,7 @@ static MagickBooleanType WriteMPCImage(const ImageInfo *image_info,Image *image, } scene++; } while (image_info->adjoin != MagickFalse); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/pgx.c b/coders/pgx.c index e2ad3ee506..65f5a86b89 100644 --- a/coders/pgx.c +++ b/coders/pgx.c @@ -397,6 +397,7 @@ static MagickBooleanType WritePGXImage(const ImageInfo *image_info,Image *image, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/psd.c b/coders/psd.c index ce4b6ef568..ee7b0e67e0 100644 --- a/coders/psd.c +++ b/coders/psd.c @@ -4023,6 +4023,7 @@ static MagickBooleanType WritePSDImage(const ImageInfo *image_info, status=MagickFalse; image->compression=compression; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/rgb.c b/coders/rgb.c index 68a6a75b6e..c21b3b8f80 100644 --- a/coders/rgb.c +++ b/coders/rgb.c @@ -107,7 +107,7 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception) *image; MagickBooleanType - status; + status = MagickTrue; MagickOffsetType scene; @@ -710,7 +710,8 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("G",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -780,7 +781,8 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("B",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -852,7 +854,8 @@ static Image *ReadRGBImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (image->alpha_trait != UndefinedPixelTrait) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -1322,7 +1325,7 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info, Image *image,ExceptionInfo *exception) { MagickBooleanType - status; + status = MagickTrue; MagickOffsetType scene; @@ -1597,7 +1600,8 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("G",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1623,7 +1627,8 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("B",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1651,7 +1656,8 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info, } if (quantum_type == RGBAQuantum) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); diff --git a/coders/sixel.c b/coders/sixel.c index ecdf419d70..0accba2ecd 100644 --- a/coders/sixel.c +++ b/coders/sixel.c @@ -1417,6 +1417,7 @@ static MagickBooleanType WriteSIXELImage(const ImageInfo *image_info, sixel_palette,image->colors,-1,output); sixel_pixels=(sixel_pixel_t *) RelinquishMagickMemory(sixel_pixels); output=(sixel_output_t *) RelinquishMagickMemory(output); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/strimg.c b/coders/strimg.c index fcb5e14026..4cbe18386c 100644 --- a/coders/strimg.c +++ b/coders/strimg.c @@ -331,6 +331,7 @@ static MagickBooleanType WriteSTRIMGImage(const ImageInfo *image_info, quantum_info=DestroyQuantumInfo(quantum_info); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/svg.c b/coders/svg.c index 0808540d17..7c4782124b 100644 --- a/coders/svg.c +++ b/coders/svg.c @@ -5277,6 +5277,7 @@ static MagickBooleanType WriteSVGImage(const ImageInfo *image_info,Image *image, token=DestroyString(token); if (primitive_info != (PrimitiveInfo *) NULL) primitive_info=(PrimitiveInfo *) RelinquishMagickMemory(primitive_info); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/tiff.c b/coders/tiff.c index 575c829ebc..3864da0720 100644 --- a/coders/tiff.c +++ b/coders/tiff.c @@ -2730,7 +2730,8 @@ static MagickBooleanType WriteGROUP4Image(const ImageInfo *image_info, huffman_image=DestroyImage(huffman_image); (void) fclose(file); (void) RelinquishUniqueFileResource(filename); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } #endif diff --git a/coders/vips.c b/coders/vips.c index 4c299270af..c24e6985c9 100644 --- a/coders/vips.c +++ b/coders/vips.c @@ -765,6 +765,7 @@ static MagickBooleanType WriteVIPSImage(const ImageInfo *image_info, metadata=GetImageProperty(image,"vips:metadata",exception); if (metadata != (const char*) NULL) WriteBlobString(image,metadata); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/webp.c b/coders/webp.c index 3a156e7cde..0472e0c55d 100644 --- a/coders/webp.c +++ b/coders/webp.c @@ -1228,7 +1228,8 @@ static MagickBooleanType WriteWEBPImage(const ImageInfo *image_info, (void) WriteBlob(image,writer.size,writer.mem); WebPMemoryWriterClear(&writer); #endif - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } #endif diff --git a/coders/wpg.c b/coders/wpg.c index 74198522ca..ccd57a3a57 100644 --- a/coders/wpg.c +++ b/coders/wpg.c @@ -1981,6 +1981,7 @@ static MagickBooleanType WriteWPGImage(const ImageInfo *image_info,Image *image, (void) WriteBlobLSBShort(image,offset & 0xffff); if (y < (ssize_t) image->rows) ThrowWriterException(CorruptImageError,"UnableToWriteImageData"); - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + status=MagickFalse; return(status); } diff --git a/coders/ycbcr.c b/coders/ycbcr.c index f049be493b..9e646d6383 100644 --- a/coders/ycbcr.c +++ b/coders/ycbcr.c @@ -701,7 +701,8 @@ static Image *ReadYCBCRImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Cb",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -771,7 +772,8 @@ static Image *ReadYCBCRImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Cr",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -844,6 +846,8 @@ static Image *ReadYCBCRImage(const ImageInfo *image_info, if (image->alpha_trait != UndefinedPixelTrait) { (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -1303,7 +1307,8 @@ static MagickBooleanType WriteYCBCRImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Cb",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1326,7 +1331,8 @@ static MagickBooleanType WriteYCBCRImage(const ImageInfo *image_info, if (status == MagickFalse) break; } - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("Cr",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); @@ -1351,7 +1357,8 @@ static MagickBooleanType WriteYCBCRImage(const ImageInfo *image_info, } if (quantum_type == RGBAQuantum) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("A",image->filename); status=OpenBlob(image_info,image,scene == 0 ? WriteBinaryBlobMode : AppendBinaryBlobMode,exception); diff --git a/coders/yuv.c b/coders/yuv.c index f84fe1f06e..e155721075 100644 --- a/coders/yuv.c +++ b/coders/yuv.c @@ -351,7 +351,8 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (interlace == PartitionInterlace) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("U",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -398,7 +399,8 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (interlace == PartitionInterlace) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("V",image->filename); status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) @@ -703,7 +705,8 @@ static MagickBooleanType WriteYUVImage(const ImageInfo *image_info,Image *image, Sample image to an even width and height, if necessary. */ image->depth=(size_t) (quantum == 1 ? 8 : 16); - width=image->columns+(image->columns & (unsigned int) (horizontal_factor-1)); + width=image->columns+(image->columns & (unsigned int) (horizontal_factor + -1)); height=image->rows+(image->rows & (unsigned int) (vertical_factor-1)); yuv_image=ResizeImage(image,width,height,TriangleFilter,exception); if (yuv_image == (Image *) NULL) @@ -816,7 +819,8 @@ static MagickBooleanType WriteYUVImage(const ImageInfo *image_info,Image *image, */ if (interlace == PartitionInterlace) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("U",image->filename); status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception); if (status == MagickFalse) @@ -850,7 +854,8 @@ static MagickBooleanType WriteYUVImage(const ImageInfo *image_info,Image *image, */ if (interlace == PartitionInterlace) { - (void) CloseBlob(image); + if (CloseBlob(image) == MagickFalse) + break; AppendImageFormat("V",image->filename); status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception); if (status == MagickFalse)