]> granicus.if.org Git - imagemagick/commitdiff
Fixed issue when writing to non-seekable custom stream.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sat, 10 Mar 2018 09:36:20 +0000 (10:36 +0100)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sat, 10 Mar 2018 09:36:47 +0000 (10:36 +0100)
MagickCore/blob.c

index c0934cda89f260fdb69bdd04cd1e23022ab9fb87..f2b7287e0b0d5cce8b7550e4b6f6a18bc506b855 100644 (file)
@@ -1995,6 +1995,7 @@ MagickExport void ImageToCustomStream(const ImageInfo *image_info,Image *image,
     *clone_info;
 
   MagickBooleanType
+    blob_support,
     status;
 
   assert(image_info != (const ImageInfo *) NULL);
@@ -2023,7 +2024,15 @@ MagickExport void ImageToCustomStream(const ImageInfo *image_info,Image *image,
       return;
     }
   (void) CopyMagickString(clone_info->magick,image->magick,MagickPathExtent);
-  if (GetMagickBlobSupport(magick_info) != MagickFalse)
+  blob_support=GetMagickBlobSupport(magick_info);
+  if ((blob_support != MagickFalse) &&
+      (GetMagickEncoderSeekableStream(magick_info) != MagickFalse))
+    {
+      if ((clone_info->custom_stream->seeker == (CustomStreamSeeker) NULL) ||
+          (clone_info->custom_stream->teller == (CustomStreamTeller) NULL))
+        blob_support=MagickFalse;
+    }
+  if (blob_support != MagickFalse)
     {
       /*
         Native blob support for this image format.
@@ -2394,6 +2403,7 @@ MagickExport void ImagesToCustomStream(const ImageInfo *image_info,
     *clone_info;
 
   MagickBooleanType
+    blob_support,
     status;
 
   assert(image_info != (const ImageInfo *) NULL);
@@ -2423,7 +2433,15 @@ MagickExport void ImagesToCustomStream(const ImageInfo *image_info,
       return;
     }
   (void) CopyMagickString(clone_info->magick,images->magick,MagickPathExtent);
-  if (GetMagickBlobSupport(magick_info) != MagickFalse)
+  blob_support=GetMagickBlobSupport(magick_info);
+  if ((blob_support != MagickFalse) &&
+      (GetMagickEncoderSeekableStream(magick_info) != MagickFalse))
+    {
+      if ((clone_info->custom_stream->seeker == (CustomStreamSeeker) NULL) ||
+          (clone_info->custom_stream->teller == (CustomStreamTeller) NULL))
+        blob_support=MagickFalse;
+    }
+  if (blob_support != MagickFalse)
     {
       /*
         Native blob support for this image format.