Commit b4c5aa16b for imagemagick.org

commit b4c5aa16bac6cfdd57151f67c81431a8f58e7c40
Author: Dirk Lemstra <dirk@lemstra.org>
Date:   Sat Nov 7 22:22:49 2026 +0100

    Make sure coders return false when a write files and use a consistent style in others.

diff --git a/coders/aai.c b/coders/aai.c
index 08a5cf56f..d2d1c9a3b 100644
--- a/coders/aai.c
+++ b/coders/aai.c
@@ -401,7 +401,10 @@ static MagickBooleanType WriteAAIImage(const ImageInfo *image_info,Image *image,
       }
       count=WriteBlob(image,(size_t) (q-pixels),pixels);
       if (count != (ssize_t) (q-pixels))
-        break;
+        {
+          status=MagickFalse;
+          break;
+        }
       if (image->previous == (Image *) NULL)
         {
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -411,6 +414,8 @@ static MagickBooleanType WriteAAIImage(const ImageInfo *image_info,Image *image,
         }
     }
     pixels=(unsigned char *) RelinquishMagickMemory(pixels);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/art.c b/coders/art.c
index 5224fb7e9..dc5d90cdb 100644
--- a/coders/art.c
+++ b/coders/art.c
@@ -341,16 +341,22 @@ static MagickBooleanType WriteARTImage(const ImageInfo *image_info,Image *image,
       GrayQuantum,pixels,exception);
     count=WriteBlob(image,length,pixels);
     if (count != (ssize_t) length)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     count=WriteBlob(image,(size_t) (-(ssize_t) length) & 0x01,pixels);
+    if (count != (ssize_t) (-(ssize_t) length & 0x01))
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/avs.c b/coders/avs.c
index 4e9a71a8b..49537de03 100644
--- a/coders/avs.c
+++ b/coders/avs.c
@@ -400,7 +400,10 @@ static MagickBooleanType WriteAVSImage(const ImageInfo *image_info,Image *image,
       }
       count=WriteBlob(image,(size_t) (q-pixels),pixels);
       if (count != (ssize_t) (q-pixels))
-        break;
+        {
+          status=MagickFalse;
+          break;
+        }
       if (image->previous == (Image *) NULL)
         {
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -410,6 +413,8 @@ static MagickBooleanType WriteAVSImage(const ImageInfo *image_info,Image *image,
         }
     }
     pixel_info=RelinquishVirtualMemory(pixel_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/bgr.c b/coders/bgr.c
index 7fe70798f..ba7a547a4 100644
--- a/coders/bgr.c
+++ b/coders/bgr.c
@@ -1181,7 +1181,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             quantum_type,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1209,24 +1212,36 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (quantum_type == BGRAQuantum)
             {
               length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
           if (image->previous == (Image *) NULL)
             {
@@ -1255,7 +1270,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1275,7 +1293,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1295,7 +1316,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1317,7 +1341,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-              break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1362,7 +1389,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1392,7 +1422,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1422,7 +1455,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1455,7 +1491,10 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1477,6 +1516,8 @@ static MagickBooleanType WriteBGRImage(const ImageInfo *image_info,Image *image,
       }
     }
     quantum_info=DestroyQuantumInfo(quantum_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/bmp.c b/coders/bmp.c
index d2aa19771..72491e74a 100644
--- a/coders/bmp.c
+++ b/coders/bmp.c
@@ -2659,7 +2659,13 @@ static MagickBooleanType WriteBMPImage(const ImageInfo *image_info,Image *image,
     if (image->debug != MagickFalse)
       (void) LogMagickEvent(CoderEvent,GetMagickModule(),
         "  Pixels:  %u bytes",bmp_info.image_size);
-    (void) WriteBlob(image,(size_t) bmp_info.image_size,pixels);
+    if (WriteBlob(image,(size_t) bmp_info.image_size,pixels) !=
+        (ssize_t) bmp_info.image_size)
+      {
+        pixel_info=RelinquishVirtualMemory(pixel_info);
+        status=MagickFalse;
+        break;
+      }
     if (profile != (StringInfo *) NULL)
       {
         if (image->debug != MagickFalse)
@@ -2671,6 +2677,8 @@ static MagickBooleanType WriteBMPImage(const ImageInfo *image_info,Image *image,
           (void) WriteBlob(image,(size_t) profile_size_pad,"\0\0\0");
       }
     pixel_info=RelinquishVirtualMemory(pixel_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/cmyk.c b/coders/cmyk.c
index ab809781f..c42196a1e 100644
--- a/coders/cmyk.c
+++ b/coders/cmyk.c
@@ -1283,7 +1283,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             quantum_type,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1311,29 +1314,44 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             CyanQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             MagentaQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             YellowQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             BlackQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (quantum_type == CMYKAQuantum)
             {
               length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
           if (image->previous == (Image *) NULL)
             {
@@ -1362,7 +1380,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             CyanQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1382,7 +1403,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             MagentaQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1402,7 +1426,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             YellowQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1422,7 +1449,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             BlackQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1444,7 +1474,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-              break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1489,7 +1522,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             CyanQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1519,7 +1555,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             MagentaQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1549,7 +1588,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             YellowQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1579,7 +1621,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
             BlackQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1611,7 +1656,10 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1633,6 +1681,8 @@ static MagickBooleanType WriteCMYKImage(const ImageInfo *image_info,
       }
     }
     quantum_info=DestroyQuantumInfo(quantum_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/dpx.c b/coders/dpx.c
index 8934a88b2..41dc1d00a 100644
--- a/coders/dpx.c
+++ b/coders/dpx.c
@@ -2068,15 +2068,16 @@ static MagickBooleanType WriteDPXImage(const ImageInfo *image_info,Image *image,
       break;
     count=WriteBlob(image,extent,pixels);
     if (count != (ssize_t) extent)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/farbfeld.c b/coders/farbfeld.c
index a343ccac6..5fc8c1d25 100644
--- a/coders/farbfeld.c
+++ b/coders/farbfeld.c
@@ -382,15 +382,16 @@ static MagickBooleanType WriteFARBFELDImage(const ImageInfo *image_info,
       RGBAQuantum,pixels,exception);
     count=WriteBlob(image,extent,pixels);
     if (count != (ssize_t) extent)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/fax.c b/coders/fax.c
index 30f2d16a3..9da30dd2d 100644
--- a/coders/fax.c
+++ b/coders/fax.c
@@ -395,6 +395,8 @@ static MagickBooleanType WriteFAXImage(const ImageInfo *image_info,Image *image,
     if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
       (void) TransformImageColorspace(image,sRGBColorspace,exception);
     status=HuffmanEncodeImage(write_info,image,image,exception);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/fits.c b/coders/fits.c
index 61b2bd373..6bdf97426 100644
--- a/coders/fits.c
+++ b/coders/fits.c
@@ -855,7 +855,10 @@ static MagickBooleanType WriteFITSImage(const ImageInfo *image_info,
               pixels);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
             image->rows);
           if (status == MagickFalse)
@@ -881,12 +884,17 @@ static MagickBooleanType WriteFITSImage(const ImageInfo *image_info,
               pixels);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
             image->rows);
           if (status == MagickFalse)
             break;
         }
+        if (status == MagickFalse)
+          break;
         length=GetQuantumExtent(image,quantum_info,GreenQuantum);
         for (y=(ssize_t) image->rows-1; y >= 0; y--)
         {
@@ -904,12 +912,17 @@ static MagickBooleanType WriteFITSImage(const ImageInfo *image_info,
               pixels);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
             image->rows);
           if (status == MagickFalse)
             break;
         }
+        if (status == MagickFalse)
+          break;
         length=GetQuantumExtent(image,quantum_info,BlueQuantum);
         for (y=(ssize_t) image->rows-1; y >= 0; y--)
         {
@@ -927,7 +940,10 @@ static MagickBooleanType WriteFITSImage(const ImageInfo *image_info,
               pixels);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
             image->rows);
           if (status == MagickFalse)
@@ -935,6 +951,8 @@ static MagickBooleanType WriteFITSImage(const ImageInfo *image_info,
         }
       }
     quantum_info=DestroyQuantumInfo(quantum_info);
+    if (status == MagickFalse)
+      break;
     length=(size_t) (FITSBlocksize-TellBlob(image) % FITSBlocksize);
     if (length != FITSBlocksize)
       {
diff --git a/coders/fl32.c b/coders/fl32.c
index 22109eb70..1e26dd7a0 100644
--- a/coders/fl32.c
+++ b/coders/fl32.c
@@ -462,15 +462,16 @@ static MagickBooleanType WriteFL32Image(const ImageInfo *image_info,
       quantum_type,pixels,exception);
     count=WriteBlob(image,extent,pixels);
     if (count != (ssize_t) extent)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/gif.c b/coders/gif.c
index 02c46c778..f54dd15da 100644
--- a/coders/gif.c
+++ b/coders/gif.c
@@ -558,8 +558,12 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
     packet[length++]=(unsigned char) (datum & 0xff); \
     if (length == 255) \
       { \
-        (void) WriteBlobByte(image,(unsigned char) length); \
-        (void) WriteBlob(image,length,packet); \
+        if ((WriteBlobByte(image,(unsigned char) length) != 1) || \
+            (WriteBlob(image,length,packet) != (ssize_t) length)) \
+          { \
+            status=MagickFalse; \
+            break; \
+          } \
         length=0; \
       } \
     datum>>=8; \
@@ -575,6 +579,9 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
     } \
 }

+  MagickBooleanType
+    status;
+
   Quantum
     index;

@@ -628,6 +635,8 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
         hash_prefix=(short *) RelinquishMagickMemory(hash_prefix);
       if (hash_suffix != (unsigned char *) NULL)
         hash_suffix=(unsigned char *) RelinquishMagickMemory(hash_suffix);
+      (void) ThrowMagickException(exception,GetMagickModule(),
+        ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
       return(MagickFalse);
     }
   /*
@@ -645,6 +654,7 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
   length=0;
   datum=0;
   bits=0;
+  status=MagickTrue;
   GIFOutputCode(clear_code);
   /*
     Encode pixels.
@@ -660,6 +670,8 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
     ssize_t
       x;

+    if (status == MagickFalse)
+      break;
     p=GetVirtualPixels(image,0,offset,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
@@ -670,6 +682,8 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
       }
     for (x=(ssize_t) (y == 0 ? 1 : 0); x < (ssize_t) image->columns; x++)
     {
+      if (status == MagickFalse)
+        break;
       /*
         Probe hash table.
       */
@@ -711,6 +725,8 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
             continue;
         }
       GIFOutputCode(waiting_code);
+      if (status == MagickFalse)
+        break;
       if (free_code < MaxGIFTable)
         {
           hash_code[k]=(short) free_code++;
@@ -780,9 +796,11 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
   /*
     Flush out the buffered code.
   */
-  GIFOutputCode(waiting_code);
-  GIFOutputCode(end_of_information_code);
-  if (bits > 0)
+  if (status != MagickFalse)
+      GIFOutputCode(waiting_code);
+  if (status != MagickFalse)
+      GIFOutputCode(end_of_information_code);
+  if ((status != MagickFalse) && (bits > 0))
     {
       /*
         Add a character to current packet.  Maximum packet size is 255.
@@ -790,18 +808,20 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
       packet[length++]=(unsigned char) (datum & 0xff);
       if (length == 255)
         {
-          (void) WriteBlobByte(image,(unsigned char) length);
-          (void) WriteBlob(image,length,packet);
+          if ((WriteBlobByte(image,(unsigned char) length) != 1) ||
+              (WriteBlob(image,length,packet) != (ssize_t) length))
+            status=MagickFalse;
           length=0;
         }
     }
   /*
     Flush accumulated data.
   */
-  if (length > 0)
+  if ((status != MagickFalse) && (length > 0))
     {
-      (void) WriteBlobByte(image,(unsigned char) length);
-      (void) WriteBlob(image,length,packet);
+      if ((WriteBlobByte(image,(unsigned char) length) != 1) ||
+          (WriteBlob(image,length,packet) != (ssize_t) length))
+        status=MagickFalse;
     }
   /*
     Free encoder memory.
@@ -810,7 +830,7 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
   hash_prefix=(short *) RelinquishMagickMemory(hash_prefix);
   hash_code=(short *) RelinquishMagickMemory(hash_code);
   packet=(unsigned char *) RelinquishMagickMemory(packet);
-  return(MagickTrue);
+  return(status);
 }

 /*
@@ -1937,7 +1957,8 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image,
           global_colormap);
         colormap=(unsigned char *) RelinquishMagickMemory(colormap);
         write_info=DestroyImageInfo(write_info);
-        ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+        (void) CloseBlob(image);
+        return(MagickFalse);
       }
     (void) WriteBlobByte(image,(unsigned char) 0x00);
     if (GetNextImageInList(image) == (Image *) NULL)
diff --git a/coders/gray.c b/coders/gray.c
index f83686a6e..ae613ba10 100644
--- a/coders/gray.c
+++ b/coders/gray.c
@@ -889,7 +889,10 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
             quantum_type,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -917,14 +920,20 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
             GrayQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (quantum_type == GrayAlphaQuantum)
             {
               length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
           if (image->previous == (Image *) NULL)
             {
@@ -953,7 +962,10 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
             GrayQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -975,7 +987,10 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-              break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1020,7 +1035,10 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1053,7 +1071,10 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1075,6 +1096,8 @@ static MagickBooleanType WriteGRAYImage(const ImageInfo *image_info,
       }
     }
     quantum_info=DestroyQuantumInfo(quantum_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/hdr.c b/coders/hdr.c
index bddcdf7bb..1c91bbbc7 100644
--- a/coders/hdr.c
+++ b/coders/hdr.c
@@ -769,7 +769,10 @@ static MagickBooleanType WriteHDRImage(const ImageInfo *image_info,Image *image,
         pixel[3]=(unsigned char) (image->columns & 0xff);
         count=WriteBlob(image,4*sizeof(*pixel),pixel);
         if (count != (ssize_t) (4*sizeof(*pixel)))
-          break;
+          {
+            status=MagickFalse;
+            break;
+          }
       }
     i=0;
     for (x=0; x < (ssize_t) image->columns; x++)
@@ -829,8 +832,13 @@ static MagickBooleanType WriteHDRImage(const ImageInfo *image_info,Image *image,
       {
         count=WriteBlob(image,4*image->columns*sizeof(*pixels),pixels);
         if (count != (ssize_t) (4*image->columns*sizeof(*pixels)))
-          break;
+          {
+            status=MagickFalse;
+            break;
+          }
       }
+    if (status == MagickFalse)
+      break;
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
diff --git a/coders/hrz.c b/coders/hrz.c
index 2ecef7ef2..0929a7662 100644
--- a/coders/hrz.c
+++ b/coders/hrz.c
@@ -340,7 +340,10 @@ static MagickBooleanType WriteHRZImage(const ImageInfo *image_info,Image *image,
     }
     count=WriteBlob(image,(size_t) (q-pixels),pixels);
     if (count != (ssize_t) (q-pixels))
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,y,hrz_image->rows);
     if (status == MagickFalse)
       break;
diff --git a/coders/icon.c b/coders/icon.c
index b08721c5d..1e1d124f2 100644
--- a/coders/icon.c
+++ b/coders/icon.c
@@ -1060,6 +1060,7 @@ static MagickBooleanType WriteICONImage(const ImageInfo *image_info,
     scanline_pad;

   ssize_t
+    count,
     i,
     x,
     y;
@@ -1196,8 +1197,10 @@ static MagickBooleanType WriteICONImage(const ImageInfo *image_info,
         directory->icons[scene]->bits_per_pixel=32;
         directory->icons[scene]->size=(size_t) length;
         directory->icons[scene]->offset=(size_t) TellBlob(image);
-        (void) WriteBlob(image,(size_t) length,png);
+        count=WriteBlob(image,(size_t) length,png);
         png=(unsigned char *) RelinquishMagickMemory(png);
+        if (count != (ssize_t) length)
+          ThrowICONWriterException(BlobError,"UnableToWriteBlob");
       }
     else
       {
@@ -1480,8 +1483,10 @@ static MagickBooleanType WriteICONImage(const ImageInfo *image_info,
             icon_colormap=(unsigned char *) RelinquishMagickMemory(
               icon_colormap);
           }
-        (void) WriteBlob(image,image_size,pixels);
+        count=WriteBlob(image,image_size,pixels);
         pixels=(unsigned char *) RelinquishMagickMemory(pixels);
+        if (count != (ssize_t) image_size)
+          ThrowICONWriterException(BlobError,"UnableToWriteBlob");
         /*
           Write matte mask.
         */
diff --git a/coders/pcx.c b/coders/pcx.c
index 8f8e13d15..154a20bb9 100644
--- a/coders/pcx.c
+++ b/coders/pcx.c
@@ -1104,7 +1104,10 @@ static MagickBooleanType WritePCXImage(const ImageInfo *image_info,Image *image,
             }
           }
           if (PCXWritePixels(&pcx_info,pixels,image) == MagickFalse)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1129,7 +1132,10 @@ static MagickBooleanType WritePCXImage(const ImageInfo *image_info,Image *image,
               p+=(ptrdiff_t) GetPixelChannels(image);
             }
             if (PCXWritePixels(&pcx_info,pixels,image) == MagickFalse)
-              break;
+              {
+                status=MagickFalse;
+                break;
+              }
             if (image->previous == (Image *) NULL)
               {
                 status=SetImageProgress(image,SaveImageTag,(MagickOffsetType)
@@ -1176,7 +1182,10 @@ static MagickBooleanType WritePCXImage(const ImageInfo *image_info,Image *image,
                   *q++=bit << (8-byte);
               }
               if (PCXWritePixels(&pcx_info,pixels,image) == MagickFalse)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
               if (image->previous == (Image *) NULL)
                 {
                   status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1220,7 +1229,10 @@ static MagickBooleanType WritePCXImage(const ImageInfo *image_info,Image *image,
               if (bit != 0)
                 *q++=byte << (8-bit);
               if (PCXWritePixels(&pcx_info,pixels,image) == MagickFalse)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
               if (image->previous == (Image *) NULL)
                 {
                   status=SetImageProgress(image,SaveImageTag,(MagickOffsetType)
@@ -1237,6 +1249,8 @@ static MagickBooleanType WritePCXImage(const ImageInfo *image_info,Image *image,
     pcx_colormap=(unsigned char *) RelinquishMagickMemory(pcx_colormap);
     if (page_table == (MagickOffsetType *) NULL)
       break;
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/pgx.c b/coders/pgx.c
index 6b2b10f79..896834c6c 100644
--- a/coders/pgx.c
+++ b/coders/pgx.c
@@ -391,16 +391,22 @@ static MagickBooleanType WritePGXImage(const ImageInfo *image_info,Image *image,
       GrayQuantum,pixels,exception);
     count=WriteBlob(image,length,pixels);
     if (count != (ssize_t) length)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     count=WriteBlob(image,(size_t) (-(ssize_t) length) & 0x01,pixels);
+    if (count != (ssize_t) (-(ssize_t) length & 0x01))
+      {
+        status=MagickFalse;
+        break;
+      }
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/pnm.c b/coders/pnm.c
index 8a3b9254b..8f3089789 100644
--- a/coders/pnm.c
+++ b/coders/pnm.c
@@ -2282,7 +2282,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
             GrayQuantum,pixels,exception);
           count=WriteBlob(image,extent,pixels);
           if (count != (ssize_t) extent)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2400,7 +2403,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
           }
           count=WriteBlob(image,extent,pixels);
           if (count != (ssize_t) extent)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2503,7 +2509,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
           }
           count=WriteBlob(image,extent,pixels);
           if (count != (ssize_t) extent)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2752,7 +2761,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
           }
           count=WriteBlob(image,extent,pixels);
           if (count != (ssize_t) extent)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2791,7 +2803,12 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
             break;
           extent=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             quantum_type,pixels,exception);
-          (void) WriteBlob(image,extent,pixels);
+          count=WriteBlob(image,extent,pixels);
+          if (count != (ssize_t) extent)
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2830,7 +2847,12 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
             break;
           extent=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             quantum_type,pixels,exception);
-          (void) WriteBlob(image,extent,pixels);
+          count=WriteBlob(image,extent,pixels);
+          if (count != (ssize_t) extent)
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -2845,6 +2867,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image,
       default:
         break;
     }
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/raw.c b/coders/raw.c
index 276888ad4..ae25cc13c 100644
--- a/coders/raw.c
+++ b/coders/raw.c
@@ -602,10 +602,10 @@ static MagickBooleanType WriteRAWImage(const ImageInfo *image_info,Image *image,
         }
     }
     quantum_info=DestroyQuantumInfo(quantum_info);
-    if (GetNextImageInList(image) == (Image *) NULL)
-      break;
     if (status == MagickFalse)
       break;
+    if (GetNextImageInList(image) == (Image *) NULL)
+      break;
     image=SyncNextImageInList(image);
     status=SetImageProgress(image,SaveImagesTag,scene++,number_scenes);
     if (status == MagickFalse)
diff --git a/coders/rgb.c b/coders/rgb.c
index 79ce7ffc9..74d1b6c43 100644
--- a/coders/rgb.c
+++ b/coders/rgb.c
@@ -1415,7 +1415,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             quantum_type,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (image->previous == (Image *) NULL)
             {
               status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1443,24 +1446,36 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
           if (quantum_type == RGBAQuantum)
             {
               length=ExportQuantumPixels(image,(CacheView *) NULL,quantum_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
           if (quantum_type == RGBOQuantum)
             {
@@ -1468,7 +1483,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
                 OpacityQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
           if (image->previous == (Image *) NULL)
             {
@@ -1497,7 +1515,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1517,7 +1538,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1537,7 +1561,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1559,7 +1586,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-              break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1604,7 +1634,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             RedQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1634,7 +1667,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             GreenQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1664,7 +1700,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
             BlueQuantum,pixels,exception);
           count=WriteBlob(image,length,pixels);
           if (count != (ssize_t) length)
-            break;
+            {
+              status=MagickFalse;
+              break;
+            }
         }
         if (image->previous == (Image *) NULL)
           {
@@ -1696,7 +1735,10 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
                 AlphaQuantum,pixels,exception);
               count=WriteBlob(image,length,pixels);
               if (count != (ssize_t) length)
-                break;
+                {
+                  status=MagickFalse;
+                  break;
+                }
             }
             if (image->previous == (Image *) NULL)
               {
@@ -1718,6 +1760,8 @@ static MagickBooleanType WriteRGBImage(const ImageInfo *image_info,
       }
     }
     quantum_info=DestroyQuantumInfo(quantum_info);
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
diff --git a/coders/sf3.c b/coders/sf3.c
index ba747151c..ec5459991 100644
--- a/coders/sf3.c
+++ b/coders/sf3.c
@@ -759,8 +759,13 @@ static MagickBooleanType WriteSF3Image(const ImageInfo *image_info,Image *image,
         checksum=crc32(checksum,pixels,length);
         count=WriteBlob(image,length,pixels);
         if (count != (ssize_t) length)
-          break;
+          {
+            status=MagickFalse;
+            break;
+          }
       }
+    if (status == MagickFalse)
+      break;
     if (GetNextImageInList(image) == (Image *) NULL)
       break;
     image=SyncNextImageInList(image);
@@ -772,10 +777,11 @@ static MagickBooleanType WriteSF3Image(const ImageInfo *image_info,Image *image,
     Finish up.
    */
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if(IsBlobSeekable(image)){
-    (void) SeekBlob(image,11,SEEK_SET);
-    (void) WriteBlobLSBLong(image,checksum  ^ 0xFFFFFFFF);
-  }
+  if (IsBlobSeekable(image))
+    {
+      (void) SeekBlob(image,11,SEEK_SET);
+      (void) WriteBlobLSBLong(image,checksum  ^ 0xFFFFFFFF);
+    }
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/strimg.c b/coders/strimg.c
index a4454a62f..1217dc4a1 100644
--- a/coders/strimg.c
+++ b/coders/strimg.c
@@ -319,7 +319,10 @@ static MagickBooleanType WriteSTRIMGImage(const ImageInfo *image_info,
       GrayQuantum,pixels,exception);
     count=WriteBlob(image,length,pixels);
     if (count != (ssize_t) length)
-      break;
+      {
+        status=MagickFalse;
+        break;
+      }
     if (image->previous == (Image *) NULL)
       {
         status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -329,8 +332,6 @@ static MagickBooleanType WriteSTRIMGImage(const ImageInfo *image_info,
       }
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);
diff --git a/coders/wpg.c b/coders/wpg.c
index 32b328eef..a3589e869 100644
--- a/coders/wpg.c
+++ b/coders/wpg.c
@@ -1742,7 +1742,8 @@ typedef struct
     pixels[256];
 } WPGRLEInfo;

-static void WPGFlushRLE(WPGRLEInfo *rle_info,Image *image,unsigned char n)
+static MagickBooleanType WPGFlushRLE(WPGRLEInfo *rle_info,Image *image,
+  unsigned char n)
 {
   if (n > rle_info->offset)
     n=(unsigned char) rle_info->offset;
@@ -1750,17 +1751,20 @@ static void WPGFlushRLE(WPGRLEInfo *rle_info,Image *image,unsigned char n)
     n=0x7F;
   if (n > 0)
     {
-      (void) WriteBlobByte(image,n);
-      (void) WriteBlob(image,n,rle_info->pixels);
+      if (WriteBlobByte(image,n) != 1)
+        return(MagickFalse);
+      if (WriteBlob(image,n,rle_info->pixels) != (ssize_t) n)
+        return(MagickFalse);
       rle_info->offset-=n;
       if (rle_info->offset > 0)
         (void) memmove(rle_info->pixels,rle_info->pixels+n,n);
       else
         rle_info->count=0;
     }
+  return(MagickTrue);
 }

-static void WPGAddRLEByte(WPGRLEInfo *rle_info,Image *image,
+static MagickBooleanType WPGAddRLEByte(WPGRLEInfo *rle_info,Image *image,
   const unsigned char byte)
 {
   rle_info->pixels[rle_info->offset++]=byte;
@@ -1772,11 +1776,13 @@ static void WPGAddRLEByte(WPGRLEInfo *rle_info,Image *image,
           if (rle_info->count >= 1)
             {
               rle_info->count++;
-              WPGFlushRLE(rle_info,image,(unsigned char) (rle_info->offset-
-                (ssize_t) rle_info->count-1));
-              (void) WriteBlobByte(image,(unsigned char) (
-                rle_info->count | 0x80));
-              (void) WriteBlobByte(image,rle_info->pixels[0]);
+              if (WPGFlushRLE(rle_info,image,(unsigned char) (rle_info->offset-
+                  (ssize_t) rle_info->count-1)) == MagickFalse)
+                return(MagickFalse);
+              if (WriteBlobByte(image,(unsigned char) (rle_info->count | 0x80)) != 1)
+                return(MagickFalse);
+              if (WriteBlobByte(image,rle_info->pixels[0]) != 1)
+                return(MagickFalse);
               rle_info->offset=1;
               rle_info->pixels[0]=byte;
             }
@@ -1786,41 +1792,43 @@ static void WPGAddRLEByte(WPGRLEInfo *rle_info,Image *image,
         rle_info->count++;
   }
   if ((rle_info->offset-(ssize_t) rle_info->count) > 0x7E)
-    {
-      WPGFlushRLE(rle_info,image,0x7F);
-      return;
-    }
+    return(WPGFlushRLE(rle_info,image,0x7F));
   if ((rle_info->offset > 0x7E) && (rle_info->count >= 1))
-     {
-       WPGFlushRLE(rle_info,image,(unsigned char) (rle_info->offset-
-         (ssize_t) rle_info->count-1));
-       return;
-     }
+    return(WPGFlushRLE(rle_info,image,(unsigned char) (rle_info->offset-
+      (ssize_t) rle_info->count-1)));
+  return(MagickTrue);
 }

-static void WPGFlush(WPGRLEInfo *rle_info,Image *image)
+static MagickBooleanType WPGFlush(WPGRLEInfo *rle_info,Image *image)
 {
   if (rle_info->count > 1)
     {
-      WPGAddRLEByte(rle_info,image,rle_info->pixels[rle_info->offset-1] ^ 0xFF);
+      if (WPGAddRLEByte(rle_info,image,rle_info->pixels[rle_info->offset-1] ^
+          0xFF) == MagickFalse)
+        return(MagickFalse);
       rle_info->offset=0;
     }
   else
     {
-      WPGFlushRLE(rle_info,image,0x7F);
-      WPGFlushRLE(rle_info,image,0x7F);
+      if (WPGFlushRLE(rle_info,image,0x7F) == MagickFalse)
+        return(MagickFalse);
+      if (WPGFlushRLE(rle_info,image,0x7F) == MagickFalse)
+        return(MagickFalse);
       rle_info->count=0;
     }
+  return(MagickTrue);
 }

-static void WPGAddRLEBlock(WPGRLEInfo *rle_info,Image *image,
+static MagickBooleanType WPGAddRLEBlock(WPGRLEInfo *rle_info,Image *image,
   const unsigned char *pixels,unsigned short extent)
 {
   while (extent-- > 0)
   {
-    WPGAddRLEByte(rle_info,image,*pixels);
+    if (WPGAddRLEByte(rle_info,image,*pixels) == MagickFalse)
+      return(MagickFalse);
     pixels++;
   }
+  return(WPGFlush(rle_info,image));
 }

 static void WPGInitializeRLE(WPGRLEInfo *rle_info)
@@ -1973,23 +1981,25 @@ static MagickBooleanType WriteWPGImage(const ImageInfo *image_info,Image *image,
       image->depth == 1 ? GrayQuantum : IndexQuantum,pixels,exception);
     if (length == 0)
       break;
-    WPGAddRLEBlock(&rle_info,image,pixels,(unsigned short) length);
-    WPGFlush(&rle_info,image);
+    status=WPGAddRLEBlock(&rle_info,image,pixels,(unsigned short) length);
+    if (status == MagickFalse)
+      break;
     status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
       image->rows);
     if (status == MagickFalse)
       break;
   }
   quantum_info=DestroyQuantumInfo(quantum_info);
-  current_offset=TellBlob(image);
-  (void) WriteBlobByte(image,0x10);
-  (void) WriteBlobByte(image,0);
-  (void) SeekBlob(image,offset,SEEK_SET);
-  offset=current_offset-offset-4;
-  (void) WriteBlobLSBShort(image,(unsigned short) (0x8000 | (offset >> 16)));
-  (void) WriteBlobLSBShort(image,offset & 0xffff);
-  if (y < (ssize_t) image->rows)
-    ThrowWriterException(CorruptImageError,"UnableToWriteImageData");
+  if (status != MagickFalse)
+    {
+      current_offset=TellBlob(image);
+      (void) WriteBlobByte(image,0x10);
+      (void) WriteBlobByte(image,0);
+      (void) SeekBlob(image,offset,SEEK_SET);
+      offset=current_offset-offset-4;
+      (void) WriteBlobLSBShort(image,(unsigned short) (0x8000 | (offset >> 16)));
+      (void) WriteBlobLSBShort(image,offset & 0xffff);
+    }
   if (CloseBlob(image) == MagickFalse)
     status=MagickFalse;
   return(status);