]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Fri, 21 Oct 2011 01:07:16 +0000 (01:07 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Fri, 21 Oct 2011 01:07:16 +0000 (01:07 +0000)
76 files changed:
Magick++/lib/Image.cpp
Magick++/lib/ImageRef.cpp
Magick++/lib/Magick++/Include.h
Magick++/lib/Magick++/STL.h
MagickCore/blob.c
MagickCore/blob.h
MagickCore/cache-view.c
MagickCore/cache-view.h
MagickCore/cache.c
MagickCore/colormap-private.h
MagickCore/colormap.c
MagickCore/compare.c
MagickCore/compress.c
MagickCore/constitute.c
MagickCore/enhance.c
MagickCore/exception.c
MagickCore/exception.h
MagickCore/fx.c
MagickCore/image.c
MagickCore/image.h
MagickCore/paint.c
MagickCore/pixel.c
MagickCore/prepress.c
MagickCore/property.c
MagickCore/segment.c
MagickCore/stream.c
MagickCore/stream.h
MagickWand/compare.c
MagickWand/composite.c
MagickWand/display.c
MagickWand/mogrify-private.h
MagickWand/montage.c
MagickWand/pixel-iterator.c
PerlMagick/Magick.xs
coders/bgr.c
coders/bmp.c
coders/caption.c
coders/cmyk.c
coders/cut.c
coders/dcm.c
coders/dds.c
coders/dib.c
coders/djvu.c
coders/exr.c
coders/gif.c
coders/gray.c
coders/jpeg.c
coders/label.c
coders/map.c
coders/mat.c
coders/miff.c
coders/msl.c
coders/palm.c
coders/pcd.c
coders/pcl.c
coders/pdb.c
coders/pict.c
coders/plasma.c
coders/png.c
coders/pnm.c
coders/ps.c
coders/ps3.c
coders/psd.c
coders/raw.c
coders/rgb.c
coders/sfw.c
coders/svg.c
coders/tga.c
coders/tiff.c
coders/webp.c
coders/wpg.c
coders/xcf.c
coders/xps.c
coders/xwd.c
coders/ycbcr.c
coders/yuv.c

index a142e0cf074a1f9ec2c8de7d2bc10b542c33c509..7dcd628328bfe314664711b5bf2e47edd7120303 100644 (file)
@@ -849,8 +849,7 @@ void Magick::Image::draw ( const Magick::Drawable &drawable_ )
     {
       drawable_.operator()(wand);
 
-      if( constImage()->exception.severity == UndefinedException)
-        DrawRender(wand);
+      DrawRender(wand);
 
       wand=DestroyDrawingWand(wand);
     }
@@ -871,12 +870,9 @@ void Magick::Image::draw ( const std::list<Magick::Drawable> &drawable_ )
            p != drawable_.end(); p++ )
         {
           p->operator()(wand);
-          if( constImage()->exception.severity != UndefinedException)
-            break;
         }
 
-      if( constImage()->exception.severity == UndefinedException)
-        DrawRender(wand);
+      DrawRender(wand);
 
       wand=DestroyDrawingWand(wand);
     }
@@ -1561,12 +1557,13 @@ void Magick::Image::process( std::string name_, const ssize_t argc, const char *
 {
   modifyImage();
 
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
   size_t status = 
     InvokeDynamicImageFilter( name_.c_str(), &image(), argc, argv,
-      &image()->exception );
-
-  if (status == false)
-    throwException( image()->exception );
+      &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Quantize colors in image using current quantization settings
@@ -1695,8 +1692,6 @@ void Magick::Image::read ( const std::string &imageSpec_ )
     }
   replaceImage( image );
   throwException( exceptionInfo );
-  if ( image )
-    throwException( image->exception );
   (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
@@ -1719,8 +1714,6 @@ void Magick::Image::read ( const Blob &blob_ )
                 blob_.length(), &exceptionInfo );
   replaceImage( image );
   throwException( exceptionInfo );
-  if ( image )
-    throwException( image->exception );
   (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
@@ -1794,8 +1787,6 @@ void Magick::Image::read ( const size_t width_,
                      &exceptionInfo );
   replaceImage( image );
   throwException( exceptionInfo );
-  if ( image )
-    throwException( image->exception );
   (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
@@ -2185,10 +2176,10 @@ void Magick::Image::transparent ( const Color &color_ )
   std::string color = color_;
 
   PixelInfo target;
-  (void) QueryColorCompliance(std::string(color_).c_str(),AllCompliance,
-    &target,&image()->exception);
   ExceptionInfo exceptionInfo;
   GetExceptionInfo( &exceptionInfo );
+  (void) QueryColorCompliance(std::string(color_).c_str(),AllCompliance,
+    &target,&exceptionInfo);
   modifyImage();
   TransparentPaintImage ( image(), &target, TransparentAlpha, MagickFalse,
     &exceptionInfo );
@@ -2211,12 +2202,12 @@ void Magick::Image::transparentChroma(const Color &colorLow_,
 
   PixelInfo targetLow;
   PixelInfo targetHigh;
-  (void) QueryColorCompliance(std::string(colorLow_).c_str(),
-    AllCompliance,&targetLow,&image()->exception);
-  (void) QueryColorCompliance(std::string(colorHigh_).c_str(),
-    AllCompliance,&targetHigh,&image()->exception);
   ExceptionInfo exceptionInfo;
   GetExceptionInfo( &exceptionInfo );
+  (void) QueryColorCompliance(std::string(colorLow_).c_str(),
+    AllCompliance,&targetLow,&exceptionInfo);
+  (void) QueryColorCompliance(std::string(colorHigh_).c_str(),
+    AllCompliance,&targetHigh,&exceptionInfo);
   modifyImage();
   TransparentPaintImageChroma ( image(), &targetLow, &targetHigh,
     TransparentAlpha, MagickFalse, &exceptionInfo );
@@ -4436,7 +4427,6 @@ void Magick::Image::modifyImage( void )
 void Magick::Image::throwImageException( void ) const
 {
   // Throw C++ exception while resetting Image exception to default state
-  throwException( const_cast<MagickCore::Image*>(constImage())->exception );
 }
 
 // Register image with image registry or obtain registration id
index 3812681c7ae3cec93ae05904561aa62e0f518de7..a5445cc830ba121ad307da3c8f3d7be789b0c234 100644 (file)
@@ -46,10 +46,12 @@ Magick::ImageRef::ImageRef ( void )
     _mutexLock()
 {
   // Allocate default image
-  _image = AcquireImage( _options->imageInfo(), &_image->exception );
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
 
-  // Test for error and throw exception (like throwImageException())
-  throwException(_image->exception);
+  _image = AcquireImage( _options->imageInfo(), &exceptionInfo );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
 // Destructor
index 7f3b6d6f19a7b989160e18122297cf80dc932ce6..a5b1fe79fa925feea9a88518e7c961c5fc3c25a5 100644 (file)
@@ -728,7 +728,6 @@ namespace Magick
   using MagickCore::GetAffineMatrix;
   using MagickCore::GetAuthenticMetacontent;
   using MagickCore::GetBlobSize;
-  using MagickCore::GetCacheViewException;
   using MagickCore::GetCacheViewAuthenticMetacontent;
   using MagickCore::GetCacheViewAuthenticPixels;
   using MagickCore::GetColorTuple;
index 5f3f7513ee347b496529d55adb554417e1a708ad..5612ecbec617b1afda4a184a9759a774053a14f1 100644 (file)
@@ -1904,7 +1904,6 @@ namespace Magick
     MagickCore::GetExceptionInfo( &exceptionInfo );
     linkImages( first_, last_ );
     MagickCore::AnimateImages( first_->imageInfo(), first_->image() );
-    MagickCore::GetImageException( first_->image(), &exceptionInfo );
     unlinkImages( first_, last_ );
     throwException( exceptionInfo );
     (void) MagickCore::DestroyExceptionInfo( &exceptionInfo );
@@ -2161,7 +2160,6 @@ namespace Magick
     MagickCore::GetExceptionInfo( &exceptionInfo );
     linkImages( first_, last_ );
     MagickCore::DisplayImages( first_->imageInfo(), first_->image() );
-    MagickCore::GetImageException( first_->image(), &exceptionInfo );
     unlinkImages( first_, last_ );
     throwException( exceptionInfo );
     (void) MagickCore::DestroyExceptionInfo( &exceptionInfo );
@@ -2247,7 +2245,6 @@ namespace Magick
     linkImages( first_, last_ );
     MagickCore::RemapImages( &quantizeInfo, first_->image(),
         mapImage_.constImage());
-    MagickCore::GetImageException( first_->image(), &exceptionInfo );
     if ( exceptionInfo.severity != MagickCore::UndefinedException )
       {
         unlinkImages( first_, last_ );
@@ -2272,11 +2269,8 @@ namespace Magick
   
         // Udate DirectClass representation of pixels
         MagickCore::SyncImage( image, &exceptionInfo );
-        if ( image->exception.severity > MagickCore::UndefinedException )
-          {
-            unlinkImages( first_, last_ );
-            throwException( exceptionInfo );
-          }
+        unlinkImages( first_, last_ );
+        throwException( exceptionInfo );
         (void) MagickCore::DestroyExceptionInfo( &exceptionInfo );
 
         // Next image
@@ -2337,7 +2331,6 @@ namespace Magick
       }
 
     // Report any transparentImage() error
-    MagickCore::GetImageException( first_->image(), &exceptionInfo );
     throwException( exceptionInfo );
     (void) MagickCore::DestroyExceptionInfo( &exceptionInfo );
   }
@@ -2398,7 +2391,6 @@ namespace Magick
 
     MagickCore::QuantizeImages( first_->quantizeInfo(),
              first_->image() );
-    MagickCore::GetImageException( first_->image(), &exceptionInfo );
     if ( exceptionInfo.severity > MagickCore::UndefinedException )
       {
   unlinkImages( first_, last_ );
index 2e345af23016d90989121b2056e445372b7406bb..b0534fc1cef56d8e705c5d4e6e7e683748283c7e 100644 (file)
@@ -1088,7 +1088,8 @@ static inline ssize_t WriteBlobStream(Image *image,const size_t length,
   return((ssize_t) length);
 }
 
-MagickExport MagickBooleanType FileToImage(Image *image,const char *filename)
+MagickExport MagickBooleanType FileToImage(Image *image,const char *filename,
+  ExceptionInfo *exception)
 {
   int
     file;
@@ -1113,8 +1114,7 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename)
   file=open_utf8(filename,O_RDONLY | O_BINARY,0);
   if (file == -1)
     {
-      ThrowFileException(&image->exception,BlobError,"UnableToOpenBlob",
-        filename);
+      ThrowFileException(exception,BlobError,"UnableToOpenBlob",filename);
       return(MagickFalse);
     }
   quantum=(size_t) MagickMaxBufferExtent;
@@ -1123,8 +1123,8 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename)
   blob=(unsigned char *) AcquireQuantumMemory(quantum,sizeof(*blob));
   if (blob == (unsigned char *) NULL)
     {
-      ThrowFileException(&image->exception,ResourceLimitError,
-        "MemoryAllocationFailed",filename);
+      ThrowFileException(exception,ResourceLimitError,"MemoryAllocationFailed",
+        filename);
       return(MagickFalse);
     }
   for ( ; ; )
@@ -1140,15 +1140,13 @@ MagickExport MagickBooleanType FileToImage(Image *image,const char *filename)
     count=WriteBlobStream(image,length,blob);
     if (count != (ssize_t) length)
       {
-        ThrowFileException(&image->exception,BlobError,"UnableToWriteBlob",
-          filename);
+        ThrowFileException(exception,BlobError,"UnableToWriteBlob",filename);
         break;
       }
   }
   file=close(file);
   if (file == -1)
-    ThrowFileException(&image->exception,BlobError,"UnableToWriteBlob",
-      filename);
+    ThrowFileException(exception,BlobError,"UnableToWriteBlob",filename);
   blob=(unsigned char *) RelinquishMagickMemory(blob);
   return(MagickTrue);
 }
index 0c5508321211dc9b4b22cfaabee75de2de8e5b8f..d9d7aaf9534985741b6c30ad69cec3a8b91fab9b 100644 (file)
@@ -76,7 +76,7 @@ extern MagickExport MagickBooleanType
   BlobToFile(char *,const void *,const size_t,ExceptionInfo *),
   CloseBlob(Image *),
   DiscardBlobBytes(Image *,const MagickSizeType),
-  FileToImage(Image *,const char *),
+  FileToImage(Image *,const char *,ExceptionInfo *),
   ImageToFile(Image *,char *,ExceptionInfo *),
   InjectImageBlob(const ImageInfo *,Image *,Image *,const char *,
     ExceptionInfo *),
index 05ce877a187862af545681faaeca97f59c438602..56364bd57cd7bb69d37adf71709d23b6dc5525c9 100644 (file)
@@ -250,39 +250,6 @@ MagickExport ColorspaceType GetCacheViewColorspace(const CacheView *cache_view)
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   G e t C a c h e V i e w E x c e p t i o n                                 %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  GetCacheViewException() returns the image exception associated with the
-%  specified view.
-%
-%  The format of the GetCacheViewException method is:
-%
-%      ExceptionInfo GetCacheViewException(const CacheView *cache_view)
-%
-%  A description of each parameter follows:
-%
-%    o cache_view: the cache view.
-%
-*/
-MagickExport ExceptionInfo *GetCacheViewException(const CacheView *cache_view)
-{
-  assert(cache_view != (CacheView *) NULL);
-  assert(cache_view->signature == MagickSignature);
-  if (cache_view->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
-      cache_view->image->filename);
-  return(&cache_view->image->exception);
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 +   G e t C a c h e V i e w E x t e n t                                       %
 %                                                                             %
 %                                                                             %
@@ -905,7 +872,7 @@ MagickExport Quantum *QueueCacheViewAuthenticPixels(CacheView *cache_view,
 %  The format of the SetCacheViewStorageClass method is:
 %
 %      MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
-%        const ClassType storage_class)
+%        const ClassType storage_class,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -913,21 +880,18 @@ MagickExport Quantum *QueueCacheViewAuthenticPixels(CacheView *cache_view,
 %
 %    o storage_class: the image storage class: PseudoClass or DirectClass.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType SetCacheViewStorageClass(CacheView *cache_view,
-  const ClassType storage_class)
+  const ClassType storage_class,ExceptionInfo *exception)
 {
-  MagickBooleanType
-    status;
-
   assert(cache_view != (CacheView *) NULL);
   assert(cache_view->signature == MagickSignature);
   if (cache_view->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
       cache_view->image->filename);
-  status=SetImageStorageClass(cache_view->image,storage_class,
-    &cache_view->image->exception);
-  return(status);
+  return(SetImageStorageClass(cache_view->image,storage_class,exception));
 }
 \f
 /*
index abb99b4cc84095d4eace8818b95e236bd33f61d2..1f97503c7866a4eaf6e69051dccdaf30104bffe9 100644 (file)
@@ -67,9 +67,6 @@ extern MagickExport const Quantum
 extern MagickExport const void
   *GetCacheViewVirtualMetacontent(const CacheView *);
 
-extern MagickExport ExceptionInfo
-  *GetCacheViewException(const CacheView *);
-
 extern MagickExport MagickBooleanType
   GetOneCacheViewVirtualPixel(const CacheView *,const ssize_t,const ssize_t,
     Quantum *,ExceptionInfo *),
@@ -77,7 +74,7 @@ extern MagickExport MagickBooleanType
     const ssize_t,const ssize_t,Quantum *,ExceptionInfo *),
   GetOneCacheViewAuthenticPixel(const CacheView *,const ssize_t,const ssize_t,
     Quantum *,ExceptionInfo *),
-  SetCacheViewStorageClass(CacheView *,const ClassType),
+  SetCacheViewStorageClass(CacheView *,const ClassType,ExceptionInfo *),
   SetCacheViewVirtualPixelMethod(CacheView *,const VirtualPixelMethod),
   SyncCacheViewAuthenticPixels(CacheView *,ExceptionInfo *);
 
index 41acfbeddf9c57a9a9598cb064676c4d9b939216..3578977dc479b22eca8fa685c32ec0247d43b1d5 100644 (file)
@@ -3932,7 +3932,7 @@ static MagickBooleanType MaskPixelCacheNexus(Image *image,NexusInfo *nexus_info,
   q=nexus_info->pixels;
   r=GetVirtualPixelsFromNexus(image->mask,MaskVirtualPixelMethod,
     nexus_info->region.x,nexus_info->region.y,nexus_info->region.width,
-    nexus_info->region.height,clip_nexus[0],&image->exception);
+    nexus_info->region.height,clip_nexus[0],exception);
   GetPixelInfo(image,&alpha);
   GetPixelInfo(image,&beta);
   number_pixels=(MagickSizeType) nexus_info->region.width*
@@ -4390,7 +4390,7 @@ MagickExport MagickBooleanType PersistPixelCache(Image *image,
   cache_info=(CacheInfo *) image->cache;
   status=OpenPixelCache(image,IOMode,exception);
   if (status != MagickFalse)
-    status=ClonePixelCachePixels(cache_info,clone_info,&image->exception);
+    status=ClonePixelCachePixels(cache_info,clone_info,exception);
   *offset+=cache_info->length+page_size-(cache_info->length % page_size);
   clone_info=(CacheInfo *) DestroyPixelCache(clone_info);
   return(status);
index 8953148ca4d784cffabf8972c867137d2165af10..1e505a257e92da2b0e9ee4c1a99e3abd668cbd1e 100644 (file)
@@ -26,12 +26,13 @@ extern "C" {
 #include <MagickCore/color.h>
 #include <MagickCore/exception-private.h>
 
-static inline Quantum ConstrainColormapIndex(Image *image,const size_t index)
+static inline Quantum ConstrainColormapIndex(Image *image,const size_t index,
+  ExceptionInfo *exception)
 {
   if (index < image->colors)
     return((Quantum) index);
-  (void) ThrowMagickException(&image->exception,GetMagickModule(),
-    CorruptImageError,"InvalidColormapIndex","`%s'",image->filename);
+  (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+    "InvalidColormapIndex","`%s'",image->filename);
   return((Quantum) 0);
 }
 
index 4b6ab0d037dbc01f3f267d0d62ea3d97d2ccdd50..db7c7214bf05f631bd1be94e36912c4286679433 100644 (file)
@@ -145,7 +145,7 @@ MagickExport MagickBooleanType AcquireImageColormap(Image *image,
     image->colormap[i].blue=(Quantum) pixel;
     image->colormap[i].alpha=OpaqueAlpha;
   }
-  return(SetImageStorageClass(image,PseudoClass,&image->exception));
+  return(SetImageStorageClass(image,PseudoClass,exception));
 }
 \f
 /*
index 289f77fd96cb0833e07fbaf7eee4cbdd0b354ef1..eb70cfdc18dcfeff8859593086478b1d819569fd 100644 (file)
@@ -1203,8 +1203,8 @@ MagickExport double *GetImageDistortions(Image *image,
   if ((reconstruct_image->columns != image->columns) ||
       (reconstruct_image->rows != image->rows))
     {
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        ImageError,"ImageSizeDiffers","`%s'",image->filename);
+      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+        "ImageSizeDiffers","`%s'",image->filename);
       return((double *) NULL);
     }
   /*
index c845f3f5d6390573a42a09ade54737e7b53d456b..9badd66ac5aeec6dc937a390b831e6385424df60 100644 (file)
@@ -773,7 +773,7 @@ MagickExport MagickBooleanType HuffmanEncodeImage(const ImageInfo *image_info,
     ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
       inject_image->filename);
   (void) ResetMagickMemory(scanline,0,width*sizeof(*scanline));
-  huffman_image=CloneImage(inject_image,0,0,MagickTrue,&image->exception);
+  huffman_image=CloneImage(inject_image,0,0,MagickTrue,exception);
   if (huffman_image == (Image *) NULL)
     {
       scanline=(unsigned char *) RelinquishMagickMemory(scanline);
index c8aeff1cf544baf9399f4ddbfd02ba093f4288cf..5a692d3dcc8990cf11307432c5f9edf0c9dd1882 100644 (file)
@@ -1341,7 +1341,6 @@ MagickExport MagickBooleanType WriteImages(const ImageInfo *image_info,
       progress_monitor=SetImageProgressMonitor(p,(MagickProgressMonitor) NULL,
         p->client_data);
     status&=WriteImage(write_info,p,exception);
-    GetImageException(p,exception);
     if (number_images != 1)
       (void) SetImageProgressMonitor(p,progress_monitor,p->client_data);
     if (write_info->adjoin != MagickFalse)
index 2c713b27d817af5e92cc5b06fd36577f1225d9c5..07db5ff350b6942f6a673a7f4f98c634511d6e51 100644 (file)
@@ -2621,7 +2621,7 @@ MagickExport MagickBooleanType LinearStretchImage(Image *image,
       break;
   }
   histogram=(MagickRealType *) RelinquishMagickMemory(histogram);
-  status=LevelImage(image,(double) black,(double) white,1.0,&image->exception);
+  status=LevelImage(image,(double) black,(double) white,1.0,exception);
   return(status);
 }
 \f
index 342f85f360c249e3bbb03366336b149f59041f3e..03eb9c4889095ddabf66c89a9d317fb77f0ad587 100644 (file)
@@ -231,6 +231,42 @@ MagickExport void CatchException(ExceptionInfo *exception)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   C l o n e E x c e p t i o n I n f o                                       %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  CloneExceptionInfo() clones the ExceptionInfo structure.
+%
+%  The format of the CloneExceptionInfo method is:
+%
+%      ExceptionInfo *CloneException(ExceptionInfo *exception)
+%
+%  A description of each parameter follows:
+%
+%    o exception: the exception info.
+%
+*/
+MagickExport ExceptionInfo *CloneExceptionInfo(ExceptionInfo *exception)
+{
+  ExceptionInfo
+    *clone_exception;
+
+  clone_exception=(ExceptionInfo *) AcquireMagickMemory(sizeof(*exception));
+  if (clone_exception == (ExceptionInfo *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  GetExceptionInfo(clone_exception);
+  InheritException(clone_exception,exception);
+  exception->relinquish=MagickTrue;
+  return(exception);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 +   D e f a u l t E r r o r H a n d l e r                                     %
 %                                                                             %
 %                                                                             %
index b979323de5ae54e862755ff1cfe3fa9e7698a0c5..12a132c90479076ca4a52a07e8a0b2c2d4c8ab4a 100644 (file)
@@ -144,6 +144,7 @@ extern MagickExport ErrorHandler
 
 extern MagickExport ExceptionInfo
   *AcquireExceptionInfo(void),
+  *CloneExceptionInfo(ExceptionInfo *),
   *DestroyExceptionInfo(ExceptionInfo *);
 
 extern MagickExport FatalErrorHandler
index 80c84e79b5196c9056313212796b5e9dc26a3a0d..3cf7880519976962d652ed8ce5fcdc44b9919c82 100644 (file)
@@ -4001,7 +4001,6 @@ MagickExport Image *PolaroidImage(const Image *image,const DrawInfo *draw_info,
   picture_image=DestroyImage(picture_image);
   if (bend_image == (Image *) NULL)
     return((Image *) NULL);
-  InheritException(&bend_image->exception,exception);
   picture_image=bend_image;
   rotate_image=RotateImage(picture_image,-90.0,exception);
   picture_image=DestroyImage(picture_image);
index 5dc96efb45c05f517355ac823a20f147b7685401..74725aef0c18c9ab5cbf06d2bda4c99181998a16 100644 (file)
@@ -177,7 +177,6 @@ MagickExport Image *AcquireImage(const ImageInfo *image_info,
   image->ticks_per_second=UndefinedTicksPerSecond;
   image->compose=OverCompositeOp;
   image->blur=1.0;
-  GetExceptionInfo(&image->exception);
   (void) QueryColorCompliance(BackgroundColor,AllCompliance,
     &image->background_color,exception);
   (void) QueryColorCompliance(BorderColor,AllCompliance,&image->border_color,
@@ -631,7 +630,6 @@ MagickExport ExceptionType CatchImageException(Image *image)
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   exception=AcquireExceptionInfo();
-  GetImageException(image,exception);
   CatchException(exception);
   severity=exception->severity;
   exception=DestroyExceptionInfo(exception);
@@ -823,8 +821,6 @@ MagickExport Image *CloneImage(const Image *image,const size_t columns,
   (void) CloneImageProperties(clone_image,image);
   (void) CloneImageArtifacts(clone_image,image);
   GetTimerInfo(&clone_image->timer);
-  GetExceptionInfo(&clone_image->exception);
-  InheritException(&clone_image->exception,&image->exception);
   if (image->ascii85 != (void *) NULL)
     Ascii85Initialize(clone_image);
   clone_image->magick_columns=image->magick_columns;
@@ -1227,7 +1223,6 @@ MagickExport Image *DestroyImage(Image *image)
   if (image->ascii85 != (Ascii85Info*) NULL)
     image->ascii85=(Ascii85Info *) RelinquishMagickMemory(image->ascii85);
   DestroyBlob(image);
-  (void) DestroyExceptionInfo(&image->exception);
   if (image->semaphore != (SemaphoreInfo *) NULL)
     DestroySemaphoreInfo(&image->semaphore);
   image->signature=(~MagickSignature);
@@ -1401,52 +1396,6 @@ MagickExport Image *GetImageClipMask(const Image *image,
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   G e t I m a g e E x c e p t i o n                                         %
-%                                                                             %
-%                                                                             %
-%                                                                             %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%  GetImageException() traverses an image sequence and returns any
-%  error more severe than noted by the exception parameter.
-%
-%  The format of the GetImageException method is:
-%
-%      void GetImageException(Image *image,ExceptionInfo *exception)
-%
-%  A description of each parameter follows:
-%
-%    o image: Specifies a pointer to a list of one or more images.
-%
-%    o exception: return the highest severity exception.
-%
-*/
-MagickExport void GetImageException(Image *image,ExceptionInfo *exception)
-{
-  register Image
-    *next;
-
-  assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  assert(exception != (ExceptionInfo *) NULL);
-  assert(exception->signature == MagickSignature);
-  for (next=image; next != (Image *) NULL; next=GetNextImageInList(next))
-  {
-    if (next->exception.severity == UndefinedException)
-      continue;
-    if (next->exception.severity > exception->severity)
-      InheritException(exception,&next->exception);
-    next->exception.severity=UndefinedException;
-  }
-}
-\f
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%                                                                             %
-%                                                                             %
-%                                                                             %
 %   G e t I m a g e I n f o                                                   %
 %                                                                             %
 %                                                                             %
index 3a5ce856f2cc3cae3555d6d02476792caf98d711..008555401cbbbb431a97743cf38d255fd4bbe447 100644 (file)
@@ -327,9 +327,6 @@ struct _Image
   BlobInfo
     *blob;             /* image file as in-memory string of 'extent' */
 
-  ExceptionInfo
-    exception;         /* Error handling report */
-
   MagickBooleanType
     debug;             /* debug output attribute */
 
@@ -556,7 +553,6 @@ extern MagickExport void
   AcquireNextImage(const ImageInfo *,Image *,ExceptionInfo *),
   DestroyImagePixels(Image *),
   DisassociateImageStream(Image *),
-  GetImageException(Image *,ExceptionInfo *),
   GetImageInfo(ImageInfo *),
   SetImageInfoBlob(ImageInfo *,const void *,const size_t),
   SetImageInfoFile(ImageInfo *,FILE *);
index 771e9a8990dd9ffcc5e0eeae637e1b1c75dca330..3ba6fe14f7807dfbf6eccd12287afcd5745f4af4 100644 (file)
@@ -178,7 +178,7 @@ MagickExport MagickBooleanType FloodfillPaintImage(Image *image,
   /*
     Set floodfill state.
   */
-  floodplane_image=CloneImage(image,0,0,MagickTrue,&image->exception);
+  floodplane_image=CloneImage(image,0,0,MagickTrue,exception);
   if (floodplane_image == (Image *) NULL)
     return(MagickFalse);
   (void) SetImageAlphaChannel(floodplane_image,OpaqueAlphaChannel,exception);
index c85cdad74e68432ddb11a53985f67b85257bec88..904256422740d1e3b1c1791c6c8ff304f8ed40ff 100644 (file)
@@ -3529,8 +3529,8 @@ MagickExport MagickBooleanType ImportImagePixels(Image *image,
     default:
     {
       quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        OptionError,"UnrecognizedPixelMap","`%s'",map);
+      (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+        "UnrecognizedPixelMap","`%s'",map);
       break;
     }
   }
index 253c7f420ce74c558f819f9ce1801da4dd512baf..1262319a753415bf7f8d05c204bc4696952cd071 100644 (file)
@@ -102,8 +102,8 @@ MagickExport double GetImageTotalInkDensity(Image *image,
   assert(image->signature == MagickSignature);
   if (image->colorspace != CMYKColorspace)
     {
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        ImageError,"ColorSeparatedImageRequired","`%s'",image->filename);
+      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
+        "ColorSeparatedImageRequired","`%s'",image->filename);
       return(0.0);
     }
   status=MagickTrue;
index c16c499564e428c8d2e578d118b32a924f38f1f9..2e54e20ddc25879d9a21dfda9d44ae225e822532 100644 (file)
@@ -333,6 +333,12 @@ MagickExport MagickBooleanType FormatImageProperty(Image *image,
   char
     value[MaxTextExtent];
 
+  ExceptionInfo
+    *exception;
+
+  MagickBooleanType
+    status;
+
   ssize_t
     n;
 
@@ -343,7 +349,10 @@ MagickExport MagickBooleanType FormatImageProperty(Image *image,
   n=FormatLocaleStringList(value,MaxTextExtent,format,operands);
   (void) n;
   va_end(operands);
-  return(SetImageProperty(image,property,value,&image->exception));
+  exception=AcquireExceptionInfo();
+  status=SetImageProperty(image,property,value,exception);
+  exception=DestroyExceptionInfo(exception);
+  return(status);
 }
 \f
 /*
@@ -2193,7 +2202,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             Image storage class and colorspace.
           */
           colorspace=image->colorspace;
-          if (IsImageGray(image,&image->exception) != MagickFalse)
+          if (IsImageGray(image,exception) != MagickFalse)
             colorspace=GRAYColorspace;
           (void) FormatLocaleString(value,MaxTextExtent,"%s",
             CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
@@ -2270,7 +2279,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             kurtosis,
             skewness;
 
-          (void) GetImageKurtosis(image,&kurtosis,&skewness,&image->exception);
+          (void) GetImageKurtosis(image,&kurtosis,&skewness,exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),kurtosis);
           break;
@@ -2290,7 +2299,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             maximum,
             minimum;
 
-          (void) GetImageRange(image,&minimum,&maximum,&image->exception);
+          (void) GetImageRange(image,&minimum,&maximum,exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),maximum);
           break;
@@ -2302,7 +2311,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             standard_deviation;
 
           (void) GetImageMean(image,&mean,&standard_deviation,
-             &image->exception);
+             exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),mean);
           break;
@@ -2313,7 +2322,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             maximum,
             minimum;
 
-          (void) GetImageRange(image,&minimum,&maximum,&image->exception);
+          (void) GetImageRange(image,&minimum,&maximum,exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),minimum);
           break;
@@ -2336,7 +2345,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
           MagickBooleanType
             opaque;
 
-          opaque=IsImageOpaque(image,&image->exception);
+          opaque=IsImageOpaque(image,exception);
           (void) CopyMagickString(value,opaque == MagickFalse ? "false" :
             "true",MaxTextExtent);
           break;
@@ -2390,7 +2399,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             kurtosis,
             skewness;
 
-          (void) GetImageKurtosis(image,&kurtosis,&skewness,&image->exception);
+          (void) GetImageKurtosis(image,&kurtosis,&skewness,exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),skewness);
           break;
@@ -2402,7 +2411,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             standard_deviation;
 
           (void) GetImageMean(image,&mean,&standard_deviation,
-            &image->exception);
+            exception);
           (void) FormatLocaleString(value,MaxTextExtent,"%.*g",
             GetMagickPrecision(),standard_deviation);
           break;
@@ -2579,7 +2588,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
   text=(char *) embed_text;
   if ((*text == '@') && ((*(text+1) == '-') ||
       (IsPathAccessible(text+1) != MagickFalse)))
-    return(FileToString(embed_text+1,~0,&image->exception));
+    return(FileToString(embed_text+1,~0,exception));
   /*
     Translate any embedded format characters.
   */
@@ -2821,7 +2830,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
       case 'k': /* Number of unique colors  */
       {
         q+=FormatLocaleString(q,extent,"%.20g",(double) GetNumberColors(image,
-          (FILE *) NULL,&image->exception));
+          (FILE *) NULL,exception));
         break;
       }
       case 'l': /* Image label  */
@@ -2881,7 +2890,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
           colorspace;
 
         colorspace=image->colorspace;
-        if (IsImageGray(image,&image->exception) != MagickFalse)
+        if (IsImageGray(image,exception) != MagickFalse)
           colorspace=GRAYColorspace;
         q+=FormatLocaleString(q,extent,"%s%s%s",CommandOptionToMnemonic(
           MagickClassOptions,(ssize_t) image->storage_class),
index 2c1eca05553be025b643e935a4dc8c02c393ff06..60dead58da0df9d96be3b31e392661262094bbbd 100644 (file)
@@ -1833,7 +1833,7 @@ MagickExport MagickBooleanType SegmentImage(Image *image,
   /*
     Initialize histogram.
   */
-  InitializeHistogram(image,histogram,&image->exception);
+  InitializeHistogram(image,histogram,exception);
   (void) OptimalTau(histogram[Red],Tau,0.2,DeltaTau,
     smooth_threshold == 0.0 ? 1.0 : smooth_threshold,extrema[Red]);
   (void) OptimalTau(histogram[Green],Tau,0.2,DeltaTau,
index aa302d4c4c1d25a2f8a5007d3b95926131eef20c..8d1e00d6a226c703abfee312d790cae9c68c8f86 100644 (file)
@@ -2704,7 +2704,7 @@ static MagickBooleanType SyncAuthenticPixelsStream(Image *image,
 %  The format of the WriteStream() method is:
 %
 %      MagickBooleanType WriteStream(const ImageInfo *image_info,Image *,
-%        StreamHandler stream)
+%        StreamHandler stream,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -2712,9 +2712,11 @@ static MagickBooleanType SyncAuthenticPixelsStream(Image *image,
 %
 %    o stream: A callback method.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 MagickExport MagickBooleanType WriteStream(const ImageInfo *image_info,
-  Image *image,StreamHandler stream)
+  Image *image,StreamHandler stream,ExceptionInfo *exception)
 {
   ImageInfo
     *write_info;
@@ -2731,7 +2733,7 @@ MagickExport MagickBooleanType WriteStream(const ImageInfo *image_info,
   assert(image->signature == MagickSignature);
   write_info=CloneImageInfo(image_info);
   write_info->stream=stream;
-  status=WriteImage(write_info,image,&image->exception);
+  status=WriteImage(write_info,image,exception);
   write_info=DestroyImageInfo(write_info);
   return(status);
 }
index 943cded5b85f6a01e2bf0adac4449556ac133905..4e0d838be08eaeeacc8a845a8971c22650dc6d4e 100644 (file)
@@ -34,7 +34,7 @@ extern MagickExport Image
 
 extern MagickExport MagickBooleanType
   OpenStream(const ImageInfo *,StreamInfo *,const char *,ExceptionInfo *),
-  WriteStream(const ImageInfo *,Image *,StreamHandler);
+  WriteStream(const ImageInfo *,Image *,StreamHandler,ExceptionInfo *);
 
 extern MagickExport StreamInfo
   *AcquireStreamInfo(const ImageInfo *,ExceptionInfo *),
index a18f55278b15da7cd6a59da222bc15b5978c3ca3..93e9a8b33257d120816a1aae3ba71c3b81ad609f 100644 (file)
@@ -1049,7 +1049,7 @@ WandExport MagickBooleanType CompareImagesCommand(ImageInfo *image_info,
             *channel_distortion;
 
           channel_distortion=GetImageDistortions(image,reconstruct_image,
-            metric,&image->exception);
+            metric,exception);
           (void) FormatLocaleFile(stderr,"Image: %s\n",image->filename);
           if ((reconstruct_image->columns != image->columns) ||
               (reconstruct_image->rows != image->rows))
index 00e6c40e20b22012b11800352209fbbd4b17bab7..00dcf0b82ccc14afbaf2cf58cb0b54ea4c1a3540 100644 (file)
@@ -195,7 +195,6 @@ static MagickBooleanType CompositeImageList(ImageInfo *image_info,Image **image,
                 for (x=0; x < (ssize_t) (*image)->columns; x+=(ssize_t) columns)
                   status&=CompositeImage(*image,composite_options->compose,
                     composite_image,x,y,exception);
-              GetImageException(*image,exception);
             }
           else
             {
@@ -218,7 +217,6 @@ static MagickBooleanType CompositeImageList(ImageInfo *image_info,Image **image,
               */
               status&=CompositeImage(*image,composite_options->compose,
                 composite_image,geometry.x,geometry.y,exception);
-              GetImageException(*image,exception);
             }
     }
   (void) SetPixelChannelMap(composite_image,channel_mask);
index 1c8f6a41fd6ff08da76cb263dcf8d31c2e98d095..49d3868d91bc20ffec1fd8d8fac835694e643ed2 100644 (file)
@@ -603,10 +603,8 @@ WandExport MagickBooleanType DisplayImageCommand(ImageInfo *image_info,
               */
               (void) CopyMagickString(display_image->filename,
                 resource_info.write_filename,MaxTextExtent);
-              (void) SetImageInfo(image_info,1,&display_image->exception);
-              status&=WriteImage(image_info,display_image,
-                &display_image->exception);
-              GetImageException(display_image,exception);
+              (void) SetImageInfo(image_info,1,exception);
+              status&=WriteImage(image_info,display_image,exception);
             }
           /*
             Proceed to next/previous image.
index 40a194ad236766bbe48cc349aa8a02ffc996c88e..5b6ce13cad65a4d4a497087b96ccccdd084145b4 100644 (file)
@@ -40,10 +40,7 @@ extern "C" {
 { \
   FireImageStack(MagickTrue,advance,MagickTrue); \
   if (image != (Image *) NULL) \
-    { \
-      InheritException(exception,&(image)->exception); \
-      (void) SyncImagesSettings(image_info,image,exception); \
-    } \
+    (void) SyncImagesSettings(image_info,image,exception); \
 }
 #define FireImageStack(postfix,advance,fire) \
   if ((j <= i) && (i < (ssize_t) argc)) \
index 92189664f697c2387670d8e772e169241e51b3e2..bb0919d6e46740b8df88c7fdbaf1cd2decedc606 100644 (file)
@@ -1763,7 +1763,6 @@ WandExport MagickBooleanType MontageImageCommand(ImageInfo *image_info,
       /*
         Write image.
       */
-      GetImageException(montage_image,exception);
       (void) CopyMagickString(image_info->filename,argv[argc-1],MaxTextExtent);
       (void) CopyMagickString(montage_image->magick_filename,argv[argc-1],
         MaxTextExtent);
index dec99443bca41df931f4145c607a41b688e54a05..b8a10bffbbc3ac3344cc041a16ae1d0e4749ff95 100644 (file)
@@ -911,6 +911,9 @@ WandExport void PixelSetLastIteratorRow(PixelIterator *iterator)
 */
 WandExport MagickBooleanType PixelSyncIterator(PixelIterator *iterator)
 {
+  MagickBooleanType
+    status;
+
   register ssize_t
     x;
 
@@ -921,7 +924,9 @@ WandExport MagickBooleanType PixelSyncIterator(PixelIterator *iterator)
   assert(iterator->signature == WandSignature);
   if (iterator->debug != MagickFalse)
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",iterator->name);
-  if (SetCacheViewStorageClass(iterator->view,DirectClass) == MagickFalse)
+  status=SetCacheViewStorageClass(iterator->view,DirectClass,
+    iterator->exception);
+  if (status == MagickFalse)
     return(MagickFalse);
   pixels=GetCacheViewAuthenticPixels(iterator->view,iterator->region.x,
     iterator->region.y+iterator->y,iterator->region.width,1,
index f1c95c95eda1ce97c75c1effe37ebd74fbe0e99d..d4ff707dbb8026a247a7c9f70dc39781c4024e40 100644 (file)
@@ -6785,12 +6785,10 @@ Layers(ref,...)
         layers=CoalesceImages(image,exception);
         if (layers == (Image *) NULL)
           break;
-        InheritException(&(layers->exception),exception);
         image=layers;
         layers=OptimizeImageLayers(image,exception);
         if (layers == (Image *) NULL)
           break;
-        InheritException(&(layers->exception),exception);
         image=DestroyImageList(image);
         image=layers;
         layers=(Image *) NULL;
@@ -6857,10 +6855,7 @@ Layers(ref,...)
       }
     }
     if (layers != (Image *) NULL)
-      {
-        InheritException(&(layers->exception),exception);
-        image=layers;
-      }
+      image=layers;
     if ((image == (Image *) NULL) || (exception->severity >= ErrorException))
       goto PerlException;
     for ( ; image; image=image->next)
index 24d3393a08eb64d05be20d63ccae688f7302618d..32c16f816652b183ca81f7ee5df1e35af2e7e1c7 100644 (file)
@@ -944,7 +944,6 @@ static Image *ReadBGRImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index 4cf51c1e79215e6a3ad6cae6ba0d495f65501947..509738c5a7537f29383c33f4f4b49d6372bf5e83 100644 (file)
@@ -1049,17 +1049,17 @@ static Image *ReadBMPImage(const ImageInfo *image_info,ExceptionInfo *exception)
             break;
           for (x=0; x < ((ssize_t) image->columns-1); x+=2)
           {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,*p & 0x0f);
+            index=ConstrainColormapIndex(image,*p & 0x0f,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
             p++;
           }
           if ((image->columns % 2) != 0)
             {
-              index=ConstrainColormapIndex(image,(*p >> 4) & 0xf);
+              index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception);
               SetPixelIndex(image,index,q);
               q+=GetPixelChannels(image);
               p++;
@@ -1093,7 +1093,7 @@ static Image *ReadBMPImage(const ImageInfo *image_info,ExceptionInfo *exception)
             break;
           for (x = (ssize_t)image->columns; x != 0; --x)
           {
-            index=ConstrainColormapIndex(image,*p++);
+            index=ConstrainColormapIndex(image,*p++,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
           }
index dc706885c0748405d12f9ee3e603f0e29cc7464f..e4697d08fcc952f86510b7fed5891d23b8e7dc52 100644 (file)
@@ -201,7 +201,6 @@ static Image *ReadCAPTIONImage(const ImageInfo *image_info,
       draw_info->interline_spacing+draw_info->stroke_width+0.5);
   if (SetImageBackgroundColor(image,exception) == MagickFalse)
     {
-      InheritException(exception,&image->exception);
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
index 7777333fb662831518c8102c4e680c2d31cc7f90..2624326c95af5b8f495391c0e465bb3bd979ae74 100644 (file)
@@ -1061,7 +1061,6 @@ static Image *ReadCMYKImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index f504d273178adceeabe1656207178e8e6dd0468a..cf184f1daab59d93fb66f280a58543e21534f5b9 100644 (file)
@@ -95,17 +95,14 @@ typedef struct
 } CUTPalHeader;
 
 \f
-static void InsertRow(ssize_t depth,unsigned char *p,ssize_t y,Image *image)
+static void InsertRow(Image *image,ssize_t depth,unsigned char *p,ssize_t y,
+  ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   size_t bit; ssize_t x;
   register Quantum *q;
   Quantum index;
 
   index=0;
-  exception=(&image->exception);
   switch (depth)
   {
     case 1:  /* Convert bitmap scanline. */
@@ -144,35 +141,36 @@ static void InsertRow(ssize_t depth,unsigned char *p,ssize_t y,Image *image)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
         {
-          index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+          index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+          index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+          index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,(*p) & 0x3);
+          index=ConstrainColormapIndex(image,(*p) & 0x3,exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
           p++;
         }
         if ((image->columns % 4) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
             if ((image->columns % 4) >= 1)
 
               {
-                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
                 SetPixelIndex(image,index,q);
                 q+=GetPixelChannels(image);
                 if ((image->columns % 4) >= 2)
 
                   {
-                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,
+                      exception);
                     SetPixelIndex(image,index,q);
                     q+=GetPixelChannels(image);
                   }
@@ -191,17 +189,17 @@ static void InsertRow(ssize_t depth,unsigned char *p,ssize_t y,Image *image)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
         {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p) & 0xf);
+            index=ConstrainColormapIndex(image,(*p) & 0xf,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
             p++;
           }
         if ((image->columns % 2) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
             p++;
@@ -216,7 +214,7 @@ static void InsertRow(ssize_t depth,unsigned char *p,ssize_t y,Image *image)
         if (q == (Quantum *) NULL) break;
         for (x=0; x < (ssize_t) image->columns; x++)
         {
-          index=ConstrainColormapIndex(image,*p);
+          index=ConstrainColormapIndex(image,*p,exception);
           SetPixelIndex(image,index,q);
           p++;
           q+=GetPixelChannels(image);
@@ -232,11 +230,8 @@ static void InsertRow(ssize_t depth,unsigned char *p,ssize_t y,Image *image)
 /*
    Compute the number of colors in Grayed R[i]=G[i]=B[i] image
 */
-static int GetCutColors(Image *image)
+static int GetCutColors(Image *image,ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   Quantum
     intensity,
     scale_intensity;
@@ -248,7 +243,6 @@ static int GetCutColors(Image *image)
     x,
     y;
 
-  exception=(&image->exception);
   intensity=0;
   scale_intensity=ScaleCharToQuantum(16);
   for (y=0; y < (ssize_t) image->rows; y++)
@@ -553,7 +547,7 @@ static Image *ReadCUTImage(const ImageInfo *image_info,ExceptionInfo *exception)
           RunCountMasked=RunCount & 0x7F;
         }
 
-      InsertRow(depth,BImgBuff,i,image);
+      InsertRow(image,depth,BImgBuff,i,exception);
     }
   (void) SyncImage(image,exception);
 
@@ -563,9 +557,9 @@ static Image *ReadCUTImage(const ImageInfo *image_info,ExceptionInfo *exception)
   if(palette==NULL)
     {    /*attempt to detect binary (black&white) images*/
       if ((image->storage_class == PseudoClass) &&
-          (IsImageGray(image,&image->exception) != MagickFalse))
+          (IsImageGray(image,exception) != MagickFalse))
         {
-          if(GetCutColors(image)==2)
+          if(GetCutColors(image,exception)==2)
             {
               for (i=0; i < (ssize_t)image->colors; i++)
                 {
index 58e1355116ab994b7639977ee8a94ff7f38072a1..ccdf200b8d77cebdd85f1702b649d5b14414d79b 100644 (file)
@@ -3863,7 +3863,8 @@ static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                           0.5)/(window_width-1))+0.5));
                   }
                 index&=mask;
-                index=(int) ConstrainColormapIndex(image,(size_t) index);
+                index=(int) ConstrainColormapIndex(image,(size_t) index,
+                  exception);
                 SetPixelIndex(image,index,q);
                 pixel.red=1UL*image->colormap[index].red;
                 pixel.green=1UL*image->colormap[index].green;
@@ -3992,7 +3993,8 @@ static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                             0.5)/(window_width-1))+0.5));
                     }
                   index&=mask;
-                  index=(int) ConstrainColormapIndex(image,(size_t) index);
+                  index=(int) ConstrainColormapIndex(image,(size_t) index,
+                    exception);
                   SetPixelIndex(image,(((size_t) GetPixelIndex(image,q)) |
                     (((size_t) index) << 8)),q);
                   pixel.red=1UL*image->colormap[index].red;
index 56385a48f0db38a63f0867fa905b3de1e8ed539a..1dbc8bcae0d76766a76425c99b704705017f0984 100644 (file)
@@ -153,7 +153,7 @@ typedef struct _DDSColors
 } DDSColors;
 
 typedef MagickBooleanType
-  DDSDecoder(Image *,DDSInfo *);
+  DDSDecoder(Image *,DDSInfo *,ExceptionInfo *);
 
 /*
   Macros
@@ -179,19 +179,19 @@ static void
     DDSColors *c, MagickBooleanType ignoreAlpha);
 
 static MagickBooleanType
-  ReadDXT1(Image *image, DDSInfo *dds_info);
+  ReadDXT1(Image *, DDSInfo *,ExceptionInfo *);
 
 static MagickBooleanType
-  ReadDXT3(Image *image, DDSInfo *dds_info);
+  ReadDXT3(Image *image, DDSInfo *dds_info,ExceptionInfo *);
 
 static MagickBooleanType
-  ReadDXT5(Image *image, DDSInfo *dds_info);
+  ReadDXT5(Image *image, DDSInfo *dds_info,ExceptionInfo *);
 
 static MagickBooleanType
-  ReadUncompressedRGB(Image *image, DDSInfo *dds_info);
+  ReadUncompressedRGB(Image *image, DDSInfo *dds_info,ExceptionInfo *);
 
 static MagickBooleanType
-  ReadUncompressedRGBA(Image *image, DDSInfo *dds_info);
+  ReadUncompressedRGBA(Image *image, DDSInfo *dds_info,ExceptionInfo *);
 
 static void
   SkipDXTMipmaps(Image *image, DDSInfo *dds_info, int texel_size);
@@ -392,7 +392,7 @@ static Image *ReadDDSImage(const ImageInfo *image_info,ExceptionInfo *exception)
         return(GetFirstImageInList(image));
       }
     
-    if ((decoder)(image, &dds_info) != MagickTrue)
+    if ((decoder)(image, &dds_info, exception) != MagickTrue)
       {
         (void) CloseBlob(image);
         return(GetFirstImageInList(image));
@@ -491,14 +491,12 @@ static void CalculateColors(unsigned short c0, unsigned short c1,
     }
 }
 
-static MagickBooleanType ReadDXT1(Image *image, DDSInfo *dds_info)
+static MagickBooleanType ReadDXT1(Image *image, DDSInfo *dds_info,
+  ExceptionInfo *exception)
 {
   DDSColors
     colors;
 
-  ExceptionInfo
-    *exception;
-
   register Quantum
     *q;
   
@@ -520,7 +518,6 @@ static MagickBooleanType ReadDXT1(Image *image, DDSInfo *dds_info)
     c0,
     c1;
   
-  exception=(&image->exception);
   for (y = 0; y < (ssize_t) dds_info->height; y += 4)
   {
     for (x = 0; x < (ssize_t) dds_info->width; x += 4)
@@ -569,14 +566,12 @@ static MagickBooleanType ReadDXT1(Image *image, DDSInfo *dds_info)
   return MagickTrue;
 }
 
-static MagickBooleanType ReadDXT3(Image *image, DDSInfo *dds_info)
+static MagickBooleanType ReadDXT3(Image *image, DDSInfo *dds_info,
+  ExceptionInfo *exception)
 {
   DDSColors
     colors;
   
-  ExceptionInfo
-    *exception;
-
   register Quantum
     *q;
   
@@ -601,7 +596,6 @@ static MagickBooleanType ReadDXT3(Image *image, DDSInfo *dds_info)
     c0,
     c1;
   
-  exception=(&image->exception);
   for (y = 0; y < (ssize_t) dds_info->height; y += 4)
   {
     for (x = 0; x < (ssize_t) dds_info->width; x += 4)
@@ -658,14 +652,12 @@ static MagickBooleanType ReadDXT3(Image *image, DDSInfo *dds_info)
   return MagickTrue;
 }
 
-static MagickBooleanType ReadDXT5(Image *image, DDSInfo *dds_info)
+static MagickBooleanType ReadDXT5(Image *image, DDSInfo *dds_info,
+  ExceptionInfo *exception)
 {
   DDSColors
     colors;
   
-  ExceptionInfo
-    *exception;
-
   MagickSizeType
     alpha_bits;
   
@@ -694,7 +686,6 @@ static MagickBooleanType ReadDXT5(Image *image, DDSInfo *dds_info)
     c0,
     c1;
   
-  exception=(&image->exception);
   for (y = 0; y < (ssize_t) dds_info->height; y += 4)
   {
     for (x = 0; x < (ssize_t) dds_info->width; x += 4)
@@ -762,18 +753,15 @@ static MagickBooleanType ReadDXT5(Image *image, DDSInfo *dds_info)
   return MagickTrue;
 }
 
-static MagickBooleanType ReadUncompressedRGB(Image *image, DDSInfo *dds_info)
+static MagickBooleanType ReadUncompressedRGB(Image *image, DDSInfo *dds_info,
+  ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   ssize_t
     x, y;
   
   register Quantum
     *q;
   
-  exception=(&image->exception);
   for (y = 0; y < (ssize_t) dds_info->height; y++)
   {
     q = QueueAuthenticPixels(image, 0, y, dds_info->width, 1,exception);
@@ -803,18 +791,15 @@ static MagickBooleanType ReadUncompressedRGB(Image *image, DDSInfo *dds_info)
   return MagickTrue;
 }
 
-static MagickBooleanType ReadUncompressedRGBA(Image *image, DDSInfo *dds_info)
+static MagickBooleanType ReadUncompressedRGBA(Image *image, DDSInfo *dds_info,
+  ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   ssize_t
     x, y;
   
   register Quantum
     *q;
   
-  exception=(&image->exception);
   for (y = 0; y < (ssize_t) dds_info->height; y++)
   {
     q = QueueAuthenticPixels(image, 0, y, dds_info->width, 1,exception);
index 38ac86bda9f8fe0e965e6f80027bedbdcd211113..9c6ca4cf97fdd60e8f8ba6d018a837f8a38f5e03 100644 (file)
@@ -696,17 +696,17 @@ static Image *ReadDIBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
         {
-          index=ConstrainColormapIndex(image,(*p >> 4) & 0xf);
+          index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,*p & 0xf);
+          index=ConstrainColormapIndex(image,*p & 0xf,exception);
           SetPixelIndex(image,index,q);
           p++;
           q+=GetPixelChannels(image);
         }
         if ((image->columns % 2) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception);
             SetPixelIndex(image,index,q);
             q+=GetPixelChannels(image);
             p++;
@@ -740,7 +740,7 @@ static Image *ReadDIBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           break;
         for (x=0; x < (ssize_t) image->columns; x++)
         {
-          index=ConstrainColormapIndex(image,*p);
+          index=ConstrainColormapIndex(image,*p,exception);
           SetPixelIndex(image,index,q);
           p++;
           q+=GetPixelChannels(image);
index 8a96229ec8fe30f8b9ff1f2bfd9e2559b1d71490..34f6aefa8a3fd974e6f663cb737932a034753f6b 100644 (file)
@@ -321,7 +321,7 @@ process_message(ddjvu_message_t *message)
  * we use the RGB format!
  */
 static void
-get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h, const ImageInfo *image_info ) {
+get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h, const ImageInfo *image_info, ExceptionInfo *exception ) {
   ddjvu_format_t
     *format;
 
@@ -394,7 +394,7 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
 
                 for (y=0; y < (ssize_t) image->rows; y++)
                         {
-                                Quantum * o = QueueAuthenticPixels(image,0,y,image->columns,1,&image->exception);
+                                Quantum * o = QueueAuthenticPixels(image,0,y,image->columns,1,exception);
                                 if (o == (Quantum *) NULL)
                                         break;
                                 bit=0;
@@ -412,11 +412,11 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                                                 byte>>=1;
                                           o+=GetPixelChannels(image);
                                         }
-                                if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
+                                if (SyncAuthenticPixels(image,exception) == MagickFalse)
                                         break;
                         }
                 if (!image->ping)
-                  SyncImage(image,&image->exception);
+                  SyncImage(image,exception);
         } else {
 #if DEBUG
                 printf("%s: expanding PHOTO page/image\n", __FUNCTION__);
@@ -436,7 +436,7 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
 #if DEBUG
                                if (i % 1000 == 0) printf("%d\n",i);
 #endif
-                               r = QueueAuthenticPixels(image,0,i,image->columns,1,&image->exception);
+                               r = QueueAuthenticPixels(image,0,i,image->columns,1,exception);
                                if (r == (Quantum *) NULL)
                                  break;
                   for (x=0; x < (ssize_t) image->columns; x++)
@@ -447,7 +447,7 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                     r+=GetPixelChannels(image);
                   }
 
-                              SyncAuthenticPixels(image,&image->exception);
+                              SyncAuthenticPixels(image,exception);
                         }
         }
         q=(unsigned char *) RelinquishMagickMemory(q);
@@ -673,7 +673,8 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
 #if 1                           /* per_line */
 
         /* q = QueueAuthenticPixels(image,0,0,image->columns,image->rows); */
-        get_page_image(lc, lc->page, 0, 0, info.width, info.height, image_info);
+        get_page_image(lc, lc->page, 0, 0, info.width, info.height, image_info,
+          exception);
 #else
         int i;
         for (i = 0;i< image->rows; i++)
index d54f3abf8372ba8cedbeefb3078977d99ce68fd2..1d960e1ef0ac2faa63b59e02937111802e15565d 100644 (file)
@@ -456,7 +456,7 @@ static MagickBooleanType WriteEXRImage(const ImageInfo *image_info,Image *image,
   }
   (void) ImfCloseOutputFile(file);
   scanline=(ImfRgba *) RelinquishMagickMemory(scanline);
-  (void) FileToImage(image,write_info->filename);
+  (void) FileToImage(image,write_info->filename,exception);
   (void) RelinquishUniqueFileResource(write_info->filename);
   write_info=DestroyImageInfo(write_info);
   (void) CloseBlob(image);
index 35f74d895737badb6cac07e2a5161964725191e5..a84bc13a8a51f30e38f6fb056f0d9bdad8685f09 100644 (file)
@@ -441,7 +441,7 @@ static MagickBooleanType DecodeImage(Image *image,const ssize_t opacity,
       c=ReadBlobLZWByte(lzw_info);
       if (c < 0)
         break;
-      index=ConstrainColormapIndex(image,(size_t) c);
+      index=ConstrainColormapIndex(image,(size_t) c,exception);
       SetPixelIndex(image,index,q);
       SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
       SetPixelAlpha(image,(ssize_t) index == opacity ? TransparentAlpha :
@@ -530,7 +530,7 @@ static MagickBooleanType DecodeImage(Image *image,const ssize_t opacity,
 %
 */
 static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
-  const size_t data_size)
+  const size_t data_size,ExceptionInfo *exception)
 {
 #define MaxCode(number_bits)  ((one << (number_bits))-1)
 #define MaxHashTable  5003
@@ -657,7 +657,7 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
     register ssize_t
       x;
 
-    p=GetVirtualPixels(image,0,offset,image->columns,1,&image->exception);
+    p=GetVirtualPixels(image,0,offset,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     if (y == 0)
@@ -1856,7 +1856,8 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image,
     */
     c=(int) MagickMax(bits_per_pixel,2);
     (void) WriteBlobByte(image,(unsigned char) c);
-    status=EncodeImage(write_info,image,(size_t) MagickMax(bits_per_pixel,2)+1);
+    status=EncodeImage(write_info,image,(size_t) MagickMax(bits_per_pixel,2)+1,
+      exception);
     if (status == MagickFalse)
       {
         global_colormap=(unsigned char *) RelinquishMagickMemory(
index 7655df7a2b36e0f9738b451ca3d533a46fc3f4fa..9445499842c1ae67cb92db3a578360d353c1e46e 100644 (file)
@@ -270,7 +270,6 @@ static Image *ReadGRAYImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index 7a853d186a201e59ad812d04b7d31fac080e7d2b..5489429a82280cb8bd9ad13903369d2c61295da4 100644 (file)
@@ -285,22 +285,26 @@ static void JPEGErrorHandler(j_common_ptr jpeg_info)
   ErrorManager
     *error_manager;
 
+  ExceptionInfo
+    *exception;
+
   Image
     *image;
 
   *message='\0';
   error_manager=(ErrorManager *) jpeg_info->client_data;
   image=error_manager->image;
+  exception=error_manager->exception;
   (jpeg_info->err->format_message)(jpeg_info,message);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
       "[%s] JPEG Trace: \"%s\"",image->filename,message);
   if (error_manager->finished != MagickFalse)
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
-      CorruptImageWarning,(char *) message,"`%s'",image->filename);
+    (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageWarning,
+      (char *) message,"`%s'",image->filename);
   else
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
-      CorruptImageError,(char *) message,"`%s'",image->filename);
+    (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+      (char *) message,"`%s'",image->filename);
   longjmp(error_manager->error_recovery,1);
 }
 
@@ -1024,7 +1028,6 @@ static Image *ReadJPEGImage(const ImageInfo *image_info,
       number_pixels=(MagickSizeType) image->columns*image->rows;
       if (number_pixels != 0)
         return(GetFirstImageInList(image));
-      InheritException(exception,&image->exception);
       return(DestroyImage(image));
     }
   jpeg_info.client_data=(void *) &error_manager;
@@ -1288,7 +1291,7 @@ static Image *ReadJPEGImage(const ImageInfo *image_info,
               pixel=(size_t) GETJSAMPLE(*p);
             else
               pixel=(size_t) ((GETJSAMPLE(*p) ^ 0x80) << 4);
-            index=ConstrainColormapIndex(image,pixel);
+            index=ConstrainColormapIndex(image,pixel,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             p++;
@@ -1326,7 +1329,7 @@ static Image *ReadJPEGImage(const ImageInfo *image_info,
       if (jpeg_info.output_components == 1)
         for (x=0; x < (ssize_t) image->columns; x++)
         {
-          index=ConstrainColormapIndex(image,(size_t) GETJSAMPLE(*p));
+          index=ConstrainColormapIndex(image,(size_t) GETJSAMPLE(*p),exception);
           SetPixelIndex(image,index,q);
           SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
           p++;
index 8f12061f23f8e7dcbe79f5bae8473fde87fe81a9..6c5b62039bdf5aa5062d23abd8e1ffeae546d764 100644 (file)
@@ -165,7 +165,6 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
   status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
   if (status == MagickFalse)
     {
-      InheritException(exception,&image->exception);
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
@@ -192,7 +191,6 @@ static Image *ReadLABELImage(const ImageInfo *image_info,
       0.5);
   if (SetImageBackgroundColor(image,exception) == MagickFalse)
     {
-      InheritException(exception,&image->exception);
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
index 49de6812075d2a3f09f7fd2367cf3ad12e5b2c4f..82199a25a123bb94924463b69c599e3f372d0178 100644 (file)
@@ -218,11 +218,12 @@ static Image *ReadMAPImage(const ImageInfo *image_info,ExceptionInfo *exception)
       break;
     for (x=0; x < (ssize_t) image->columns; x++)
     {
-      index=ConstrainColormapIndex(image,*p);
+      index=ConstrainColormapIndex(image,*p,exception);
       p++;
       if (image->colors > 256)
         {
-          index=ConstrainColormapIndex(image,((size_t) index << 8)+(*p));
+          index=ConstrainColormapIndex(image,((size_t) index << 8)+(*p),
+            exception);
           p++;
         }
       SetPixelIndex(image,index,q);
index 690f732b907f11a072df977c2c6fd212ea825c60..2a9dfde0ef690ea15a561114dd581770e8400d5a 100644 (file)
@@ -178,11 +178,9 @@ typedef enum
 static const QuantumType z2qtype[4] = {GrayQuantum, BlueQuantum, GreenQuantum, RedQuantum};
 
 
-static void InsertComplexDoubleRow(double *p, int y, Image * image, double MinVal,
-                                  double MaxVal)
+static void InsertComplexDoubleRow(Image *image,double *p,int y,double MinVal,
+  double MaxVal,ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
 
   double f;
   int x;
@@ -193,7 +191,6 @@ static void InsertComplexDoubleRow(double *p, int y, Image * image, double MinVa
   if (MaxVal == 0)
     MaxVal = 1;
 
-  exception=(&image->exception);
   q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
   if (q == (Quantum *) NULL)
     return;
@@ -244,12 +241,9 @@ static void InsertComplexDoubleRow(double *p, int y, Image * image, double MinVa
 }
 
 
-static void InsertComplexFloatRow(float *p, int y, Image * image, double MinVal,
-                                  double MaxVal)
+static void InsertComplexFloatRow(Image *image,float *p,int y,double MinVal,
+  double MaxVal,ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   double f;
   int x;
   register Quantum *q;
@@ -259,7 +253,6 @@ static void InsertComplexFloatRow(float *p, int y, Image * image, double MinVal,
   if (MaxVal == 0)
     MaxVal = 1;
 
-  exception=(&image->exception);
   q = QueueAuthenticPixels(image, 0, y, image->columns, 1,exception);
   if (q == (Quantum *) NULL)
     return;
@@ -950,14 +943,16 @@ ExitLoop:
         for (i = 0; i < (ssize_t) MATLAB_HDR.SizeY; i++)
   {
           ReadBlobDoublesXXX(image2, ldblk, (double *)BImgBuff);
-          InsertComplexDoubleRow((double *)BImgBuff, i, image, MinVal, MaxVal);
+          InsertComplexDoubleRow(image, (double *)BImgBuff, i, MinVal, MaxVal,
+            exception);
   }
 
       if (CellType==miSINGLE)
         for (i = 0; i < (ssize_t) MATLAB_HDR.SizeY; i++)
   {
           ReadBlobFloatsXXX(image2, ldblk, (float *)BImgBuff);
-          InsertComplexFloatRow((float *)BImgBuff, i, image, MinVal, MaxVal);
+          InsertComplexFloatRow(image,(float *)BImgBuff,i,MinVal,MaxVal,
+            exception);
   }    
     }
 
index b08525f2349a0aa207ee37fd396495d287bb7995..6e4a2a19094fed2fee1150d71658a96d42c10574 100644 (file)
@@ -199,7 +199,7 @@ static inline size_t MagickMin(const size_t x,const size_t y)
 }
 
 static void PushRunlengthPacket(Image *image,const unsigned char *pixels,
-  size_t *length,PixelInfo *pixel)
+  size_t *length,PixelInfo *pixel,ExceptionInfo *exception)
 {
   const unsigned char
     *p;
@@ -213,24 +213,25 @@ static void PushRunlengthPacket(Image *image,const unsigned char *pixels,
         case 32:
         {
           pixel->index=ConstrainColormapIndex(image,
-            (*p << 24) | (*(p+1) << 16) | (*(p+2) << 8) | *(p+3));
+            (*p << 24) | (*(p+1) << 16) | (*(p+2) << 8) | *(p+3),exception);
           p+=4;
           break;
         }
         case 16:
         {
-          pixel->index=ConstrainColormapIndex(image,(*p << 8) | *(p+1));
+          pixel->index=ConstrainColormapIndex(image,(*p << 8) | *(p+1),
+            exception);
           p+=2;
           break;
         }
         case 8:
         {
-          pixel->index=ConstrainColormapIndex(image,*p);
+          pixel->index=ConstrainColormapIndex(image,*p,exception);
           p++;
           break;
         }
         default:
-          (void) ThrowMagickException(&image->exception,GetMagickModule(),
+          (void) ThrowMagickException(exception,GetMagickModule(),
             CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
       }
       switch (image->depth)
@@ -274,7 +275,7 @@ static void PushRunlengthPacket(Image *image,const unsigned char *pixels,
           break;
         }
         default:
-          (void) ThrowMagickException(&image->exception,GetMagickModule(),
+          (void) ThrowMagickException(exception,GetMagickModule(),
             CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
       }
       *length=(size_t) (*p++)+1;
@@ -352,8 +353,8 @@ static void PushRunlengthPacket(Image *image,const unsigned char *pixels,
       break;
     }
     default:
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
+      (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+        "ImageDepthNotSupported","`%s'",image->filename);
   }
   *length=(size_t) (*p++)+1;
 }
@@ -1405,7 +1406,7 @@ static Image *ReadMIFFImage(const ImageInfo *image_info,
             if (length == 0)
               {
                 count=ReadBlob(image,packet_size,pixels);
-                PushRunlengthPacket(image,pixels,&length,&pixel);
+                PushRunlengthPacket(image,pixels,&length,&pixel,exception);
               }
             length--;
             if (image->storage_class == PseudoClass)
@@ -1646,7 +1647,7 @@ ModuleExport void UnregisterMIFFImage(void)
 */
 
 static unsigned char *PopRunlengthPacket(Image *image,unsigned char *pixels,
-  size_t length,PixelInfo *pixel)
+  size_t length,PixelInfo *pixel,ExceptionInfo *exception)
 {
   if (image->storage_class != DirectClass)
     {
@@ -1665,7 +1666,7 @@ static unsigned char *PopRunlengthPacket(Image *image,unsigned char *pixels,
           break;
         }
         default:
-          (void) ThrowMagickException(&image->exception,GetMagickModule(),
+          (void) ThrowMagickException(exception,GetMagickModule(),
             CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
       }
       switch (image->depth)
@@ -1708,7 +1709,7 @@ static unsigned char *PopRunlengthPacket(Image *image,unsigned char *pixels,
           break;
         }
         default:
-          (void) ThrowMagickException(&image->exception,GetMagickModule(),
+          (void) ThrowMagickException(exception,GetMagickModule(),
             CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
       }
       *pixels++=(unsigned char) length;
@@ -1788,8 +1789,8 @@ static unsigned char *PopRunlengthPacket(Image *image,unsigned char *pixels,
       break;
     }
     default:
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        CorruptImageError,"ImageDepthNotSupported","`%s'",image->filename);
+      (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+        "ImageDepthNotSupported","`%s'",image->filename);
   }
   *pixels++=(unsigned char) length;
   return(pixels);
@@ -2418,13 +2419,13 @@ static MagickBooleanType WriteMIFFImage(const ImageInfo *image_info,
               length++;
             else
               {
-                q=PopRunlengthPacket(image,q,length,&pixel);
+                q=PopRunlengthPacket(image,q,length,&pixel,exception);
                 length=0;
               }
             SetPixelInfo(image,p,&pixel);
             p+=GetPixelChannels(image);
           }
-          q=PopRunlengthPacket(image,q,length,&pixel);
+          q=PopRunlengthPacket(image,q,length,&pixel,exception);
           (void) WriteBlob(image,(size_t) (q-pixels),pixels);
           break;
         }
index 8e7b0b0f5af54c6bb4eee476453976f72082c62c..2c10ce16230d48c4753dbbd5551c4ca70059e604 100644 (file)
@@ -572,9 +572,10 @@ static void MSLPushImage(MSLInfo *msl_info,Image *image)
     msl_info->draw_info[n-1]);
   if (image == (Image *) NULL)
     msl_info->attributes[n]=AcquireImage(msl_info->image_info[n],
-      &image->exception);
+      msl_info->exception);
   else
-    msl_info->attributes[n]=CloneImage(image,0,0,MagickTrue,&image->exception);
+    msl_info->attributes[n]=CloneImage(image,0,0,MagickTrue,
+      msl_info->exception);
   msl_info->image[n]=(Image *) image;
   if ((msl_info->image_info[n] == (ImageInfo *) NULL) ||
     (msl_info->attributes[n] == (Image *) NULL))
@@ -743,7 +744,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           channel_mask=SetPixelChannelMask(msl_info->image[n],channel);
           noise_image=AddNoiseImage(msl_info->image[n],noise,1.0,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           if (noise_image == (Image *) NULL)
             break;
@@ -1083,7 +1084,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           draw_info->affine.ty=affine.rx*current.tx+affine.sy*current.ty+
             affine.ty;
           (void) AnnotateImage(msl_info->image[n],draw_info,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           draw_info=DestroyDrawInfo(draw_info);
           break;
         }
@@ -1138,7 +1139,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           append_image=AppendImages(msl_info->image[n],stack,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (append_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -1241,7 +1242,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           channel_mask=SetPixelChannelMask(msl_info->image[n],channel);
           blur_image=BlurImage(msl_info->image[n],geometry_info.rho,
             geometry_info.sigma,geometry_info.xi,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           if (blur_image == (Image *) NULL)
             break;
@@ -1352,7 +1353,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           border_image=BorderImage(msl_info->image[n],&geometry,
-            msl_info->image[n]->compose,&msl_info->image[n]->exception);
+            msl_info->image[n]->compose,msl_info->exception);
           if (border_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -1414,7 +1415,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
                   if (LocaleCompare(keyword,"fill") == 0)
                     {
                       (void) QueryColorCompliance(value,AllCompliance,
-                        &target,&msl_info->image[n]->exception);
+                        &target,msl_info->exception);
                       break;
                     }
                   ThrowMSLException(OptionError,"UnrecognizedAttribute",
@@ -1430,7 +1431,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           colorize_image=ColorizeImage(msl_info->image[n],blend,&target,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (colorize_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -1511,7 +1512,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           *newImage;
 
         newImage=CharcoalImage(msl_info->image[n],radius,sigma,bias,
-          &msl_info->image[n]->exception);
+          msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -1616,7 +1617,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           chop_image=ChopImage(msl_info->image[n],&geometry,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (chop_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -1742,7 +1743,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           (void) FloodfillPaintImage(msl_info->image[n],draw_info,&target,
             geometry.x,geometry.y,paint_method == FloodfillMethod ?
-            MagickFalse : MagickTrue,&msl_info->image[n]->exception);
+            MagickFalse : MagickTrue,msl_info->exception);
           draw_info=DestroyDrawInfo(draw_info);
           break;
         }
@@ -2150,7 +2151,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) ContrastImage(msl_info->image[n],sharpen,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       if (LocaleCompare((const char *) tag,"crop") == 0)
@@ -2248,7 +2249,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           crop_image=CropImage(msl_info->image[n],&geometry,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (crop_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2333,7 +2334,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           despeckle_image=DespeckleImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (despeckle_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2367,7 +2368,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) DisplayImages(msl_info->image_info[n],msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       if (LocaleCompare((const char *) tag,"draw") == 0)
@@ -2775,7 +2776,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           edge_image=EdgeImage(msl_info->image[n],geometry_info.rho,
-            geometry_info.sigma,&msl_info->image[n]->exception);
+            geometry_info.sigma,msl_info->exception);
           if (edge_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2854,7 +2855,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           emboss_image=EmbossImage(msl_info->image[n],geometry_info.rho,
-            geometry_info.sigma,&msl_info->image[n]->exception);
+            geometry_info.sigma,msl_info->exception);
           if (emboss_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2886,7 +2887,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           enhance_image=EnhanceImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (enhance_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2923,7 +2924,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) EqualizeImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       ThrowMSLException(OptionError,"UnrecognizedElement",(const char *) tag);
@@ -2948,7 +2949,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             *newImage;
 
           newImage=MergeImageLayers(msl_info->image[n],FlattenLayer,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (newImage == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -2981,7 +2982,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           flip_image=FlipImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (flip_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3013,7 +3014,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           flop_image=FlopImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (flop_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3158,7 +3159,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           frame_info.width=msl_info->image[n]->columns+2*frame_info.x;
           frame_info.height=msl_info->image[n]->rows+2*frame_info.y;
           frame_image=FrameImage(msl_info->image[n],&frame_info,
-            msl_info->image[n]->compose,&msl_info->image[n]->exception);
+            msl_info->image[n]->compose,msl_info->exception);
           if (frame_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3271,7 +3272,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             (void) FormatLocaleString(gamma,MaxTextExtent,"%g,%g,%g",
               (double) pixel.red,(double) pixel.green,(double) pixel.blue);
           (void) GammaImage(msl_info->image[n],atof(gamma),
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       else if (LocaleCompare((const char *) tag,"get") == 0)
@@ -3457,7 +3458,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           implode_image=ImplodeImage(msl_info->image[n],geometry_info.rho,
-            msl_info->image[n]->interpolate,&msl_info->image[n]->exception);
+            msl_info->image[n]->interpolate,msl_info->exception);
           if (implode_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3534,7 +3535,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
 
         /* process image */
         LevelImage(msl_info->image[n],levelBlack,levelWhite,levelGamma,
-          &msl_info->image[n]->exception);
+          msl_info->exception);
         break;
       }
     }
@@ -3566,7 +3567,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           magnify_image=MagnifyImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (magnify_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3790,7 +3791,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           channel_mask=SetPixelChannelMask(msl_info->image[n],AlphaChannel);
           (void) FloodfillPaintImage(msl_info->image[n],draw_info,&target,
             geometry.x,geometry.y,paint_method == FloodfillMethod ?
-            MagickFalse : MagickTrue,&msl_info->image[n]->exception);
+            MagickFalse : MagickTrue,msl_info->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           draw_info=DestroyDrawInfo(draw_info);
           break;
@@ -3856,7 +3857,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           median_image=StatisticImage(msl_info->image[n],MedianStatistic,
             (size_t) geometry_info.rho,(size_t) geometry_info.sigma,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (median_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -3888,7 +3889,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
             }
           minify_image=MinifyImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (minify_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -4018,7 +4019,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           (void) FormatLocaleString(modulate,MaxTextExtent,"%g,%g,%g",
             geometry_info.rho,geometry_info.sigma,geometry_info.xi);
           (void) ModulateImage(msl_info->image[n],modulate,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       ThrowMSLException(OptionError,"UnrecognizedElement",(const char *) tag);
@@ -4094,7 +4095,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           channel_mask=SetPixelChannelMask(msl_info->image[n],channel);
           (void) NegateImage(msl_info->image[n],gray,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           break;
         }
@@ -4144,7 +4145,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) NormalizeImage(msl_info->image[n],
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       ThrowMSLException(OptionError,"UnrecognizedElement",(const char *) tag);
@@ -4212,7 +4213,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           paint_image=OilPaintImage(msl_info->image[n],geometry_info.rho,
-            geometry_info.sigma,&msl_info->image[n]->exception);
+            geometry_info.sigma,msl_info->exception);
           if (paint_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -4293,7 +4294,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           channel_mask=SetPixelChannelMask(msl_info->image[n],channel);
           (void) OpaquePaintImage(msl_info->image[n],&target,&fill_color,
-            MagickFalse,&msl_info->image[n]->exception);
+            MagickFalse,msl_info->exception);
           (void) SetPixelChannelMap(msl_info->image[n],channel_mask);
           break;
         }
@@ -4878,7 +4879,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           draw_info->affine.ty=affine.rx*current.tx+affine.sy*current.ty+
             affine.ty;
           status=GetTypeMetrics(msl_info->attributes[n],draw_info,&metrics,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (status != MagickFalse)
             {
               Image
@@ -5011,7 +5012,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) RaiseImage(msl_info->image[n],&geometry,raise,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       if (LocaleCompare((const char *) tag,"read") == 0)
@@ -5115,7 +5116,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           paint_image=StatisticImage(msl_info->image[n],NonpeakStatistic,
             (size_t) geometry_info.rho,(size_t) geometry_info.sigma,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (paint_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5351,7 +5352,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           msl_info->image[n]->y_resolution))+0.5);
         resample_image=ResizeImage(msl_info->image[n],width,height,
           msl_info->image[n]->filter,msl_info->image[n]->blur,
-          &msl_info->image[n]->exception);
+          msl_info->exception);
         if (resample_image == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5466,7 +5467,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           resize_image=ResizeImage(msl_info->image[n],geometry.width,
-            geometry.height,filter,blur,&msl_info->image[n]->exception);
+            geometry.height,filter,blur,msl_info->exception);
           if (resize_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5546,7 +5547,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           roll_image=RollImage(msl_info->image[n],geometry.x,geometry.y,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (roll_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5623,7 +5624,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
         Image
           *newImage;
 
-        newImage=RollImage(msl_info->image[n], x, y, &msl_info->image[n]->exception);
+        newImage=RollImage(msl_info->image[n], x, y, msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5692,7 +5693,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           rotate_image=RotateImage(msl_info->image[n],geometry_info.rho,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           if (rotate_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5745,7 +5746,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
         Image
           *newImage;
 
-        newImage=RotateImage(msl_info->image[n], degrees, &msl_info->image[n]->exception);
+        newImage=RotateImage(msl_info->image[n], degrees, msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5829,7 +5830,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           sample_image=SampleImage(msl_info->image[n],geometry.width,
-            geometry.height,&msl_info->image[n]->exception);
+            geometry.height,msl_info->exception);
           if (sample_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -5906,7 +5907,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           scale_image=ScaleImage(msl_info->image[n],geometry.width,
-            geometry.height,&msl_info->image[n]->exception);
+            geometry.height,msl_info->exception);
           if (scale_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6259,7 +6260,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           shade_image=ShadeImage(msl_info->image[n],gray,geometry_info.rho,
-            geometry_info.sigma,&msl_info->image[n]->exception);
+            geometry_info.sigma,msl_info->exception);
           if (shade_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6361,7 +6362,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
             }
           shadow_image=ShadowImage(msl_info->image[n],geometry_info.rho,
             geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
-            ceil(geometry_info.psi-0.5),&msl_info->image[n]->exception);
+            ceil(geometry_info.psi-0.5),msl_info->exception);
           if (shadow_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6442,7 +6443,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           *newImage;
 
         newImage=SharpenImage(msl_info->image[n],radius,sigma,bias,
-          &msl_info->image[n]->exception);
+          msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6528,7 +6529,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
 
 
         newImage=ShaveImage(msl_info->image[n], &rectInfo,
-          &msl_info->image[n]->exception);
+          msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6622,7 +6623,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           shear_image=ShearImage(msl_info->image[n],geometry_info.rho,
-            geometry_info.sigma,&msl_info->image[n]->exception);
+            geometry_info.sigma,msl_info->exception);
           if (shear_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6717,7 +6718,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           (void) SolarizeImage(msl_info->image[n],geometry_info.rho,
-            &msl_info->image[n]->exception);
+            msl_info->exception);
           break;
         }
       if (LocaleCompare((const char *) tag,"spread") == 0)
@@ -6780,7 +6781,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           spread_image=SpreadImage(msl_info->image[n],geometry_info.rho,
-            msl_info->image[n]->interpolate,&msl_info->image[n]->exception);
+            msl_info->image[n]->interpolate,msl_info->exception);
           if (spread_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6844,7 +6845,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
         Image
           *newImage;
 
-        newImage=SteganoImage(msl_info->image[n], watermark, &msl_info->image[n]->exception);
+        newImage=SteganoImage(msl_info->image[n], watermark, msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6909,7 +6910,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
         Image
           *newImage;
 
-        newImage=StereoImage(msl_info->image[n], stereoImage, &msl_info->image[n]->exception);
+        newImage=StereoImage(msl_info->image[n], stereoImage, msl_info->exception);
         if (newImage == (Image *) NULL)
           break;
         msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -6980,8 +6981,9 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               ThrowMSLException(OptionError,"NoSuchImage",(const char *) tag);
               break;
             }
-          swap=CloneImage(p,0,0,MagickTrue,&p->exception);
-          ReplaceImageInList(&p,CloneImage(q,0,0,MagickTrue,&q->exception));
+          swap=CloneImage(p,0,0,MagickTrue,msl_info->exception);
+          ReplaceImageInList(&p,CloneImage(q,0,0,MagickTrue,
+            msl_info->exception));
           ReplaceImageInList(&q,swap);
           msl_info->image[n]=GetFirstImageInList(q);
           break;
@@ -7046,7 +7048,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               }
             }
           swirl_image=SwirlImage(msl_info->image[n],geometry_info.rho,
-            msl_info->image[n]->interpolate,&msl_info->image[n]->exception);
+            msl_info->image[n]->interpolate,msl_info->exception);
           if (swirl_image == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -7221,7 +7223,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
                 (void) QueryColorCompliance(value,AllCompliance,&target,
                   &exception);
                 (void) TransparentPaintImage(msl_info->image[n],&target,
-                  TransparentAlpha,MagickFalse,&msl_info->image[n]->exception);
+                  TransparentAlpha,MagickFalse,msl_info->exception);
                 break;
               }
               ThrowMSLException(OptionError,"UnrecognizedAttribute",keyword);
@@ -7257,7 +7259,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           rectInfo.height = rectInfo.width = 0;
           rectInfo.x =  rectInfo.y = 0;
 
-          newImage=CropImage(msl_info->image[n],&rectInfo, &msl_info->image[n]->exception);
+          newImage=CropImage(msl_info->image[n],&rectInfo, msl_info->exception);
           if (newImage == (Image *) NULL)
             break;
           msl_info->image[n]=DestroyImage(msl_info->image[n]);
@@ -7309,7 +7311,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           /* process */
           {
             (void) WriteImage(msl_info->image_info[n], msl_info->image[n],
-              &msl_info->image[n]->exception);
+              msl_info->exception);
             break;
           }
         }
@@ -7814,7 +7816,7 @@ static MagickBooleanType ProcessMSLScript(const ImageInfo *image_info,Image **im
     msl_info.group_info);
   if (*image == (Image *) NULL)
     *image=(*msl_info.image);
-  if ((*msl_info.image)->exception.severity != UndefinedException)
+  if (msl_info.exception->severity != UndefinedException)
     return(MagickFalse);
   return(MagickTrue);
 }
index 9735b583e3c44aee2b1fcc82dc35481740126ef3..fd1fa99b60952fb98579198f41bf83097371f12e 100644 (file)
@@ -370,7 +370,7 @@ static Image *ReadPALMImage(const ImageInfo *image_info,
             for (i=0; i < (ssize_t) count; i++)
             {
               ReadBlobByte(image);
-              index=ConstrainColormapIndex(image,255-i);
+              index=ConstrainColormapIndex(image,255-i,exception);
               image->colormap[(int) index].red=
                 ScaleCharToQuantum((unsigned char) ReadBlobByte(image));
               image->colormap[(int) index].green=
@@ -383,7 +383,7 @@ static Image *ReadPALMImage(const ImageInfo *image_info,
         {
           for (i=0; i < (ssize_t) (1L << bits_per_pixel); i++)
           {
-            index=ConstrainColormapIndex(image,255-i);
+            index=ConstrainColormapIndex(image,255-i,exception);
             image->colormap[(int) index].red=
               ScaleCharToQuantum(PalmPalette[i][0]);
             image->colormap[(int) index].green=
index bcf71267c83e4cb379a1ba6166527039c19a89b3..15fb981017e95f0126317cdd4c30b678b7ead371 100644 (file)
@@ -295,7 +295,7 @@ static MagickBooleanType DecodeImage(Image *image,unsigned char *luma,
       r++;
     if ((row > image->rows) || (r == (PCDTable *) NULL))
       {
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
+        (void) ThrowMagickException(exception,GetMagickModule(),
           CorruptImageWarning,"SkipToSyncByte","`%s'",image->filename);
         while ((sum & 0x00fff000) != 0x00fff000)
           PCDGetBits(8);
@@ -983,7 +983,7 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
   if ((geometry.height % 2) != 0)
     geometry.height--;
   tile_image=ResizeImage(image,geometry.width,geometry.height,TriangleFilter,
-    1.0,&image->exception);
+    1.0,exception);
   if (tile_image == (Image *) NULL)
     return(MagickFalse);
   flags=ParseGeometry(page_geometry,&geometry_info);
@@ -1006,7 +1006,7 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
       border_info.width=(geometry.width-tile_image->columns+1) >> 1;
       border_info.height=(geometry.height-tile_image->rows+1) >> 1;
       bordered_image=BorderImage(tile_image,&border_info,image->compose,
-        &image->exception);
+        exception);
       if (bordered_image == (Image *) NULL)
         return(MagickFalse);
       tile_image=DestroyImage(tile_image);
@@ -1016,7 +1016,7 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
   if (IsRGBColorspace(image->colorspace) == MagickFalse)
     (void) TransformImageColorspace(tile_image,YCCColorspace,exception);
   downsample_image=ResizeImage(tile_image,tile_image->columns/2,
-    tile_image->rows/2,TriangleFilter,1.0,&image->exception);
+    tile_image->rows/2,TriangleFilter,1.0,exception);
   if (downsample_image == (Image *) NULL)
     return(MagickFalse);
   /*
@@ -1024,8 +1024,7 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
   */
   for (y=0; y < (ssize_t) tile_image->rows; y+=2)
   {
-    p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,
-      &tile_image->exception);
+    p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,exception);
     if (p == (const Quantum *) NULL)
       break;
     for (x=0; x < (ssize_t) (tile_image->columns << 1); x++)
@@ -1033,8 +1032,8 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
       (void) WriteBlobByte(image,ScaleQuantumToChar(GetPixelRed(tile_image,p)));
       p+=GetPixelChannels(tile_image);
     }
-    q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,
-      1,&downsample_image->exception);
+    q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+      exception);
     if (q == (Quantum *) NULL)
       break;
     for (x=0; x < (ssize_t) downsample_image->columns; x++)
@@ -1043,8 +1042,8 @@ static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
         GetPixelGreen(tile_image,q)));
       q++;
     }
-    q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,
-      1,&downsample_image->exception);
+    q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+      exception);
     if (q == (Quantum *) NULL)
       break;
     for (x=0; x < (ssize_t) downsample_image->columns; x++)
index 4386e299ddc340943f1d6895510dd928a54b0f44..6a36b2bdb8d2dc8d71692192faf31102295756ac 100644 (file)
@@ -374,7 +374,7 @@ static Image *ReadPCLImage(const ImageInfo *image_info,ExceptionInfo *exception)
       Image
         *cmyk_image;
 
-      cmyk_image=ConsolidateCMYKImages(image,&image->exception);
+      cmyk_image=ConsolidateCMYKImages(image,exception);
       if (cmyk_image != (Image *) NULL)
         {
           image=DestroyImageList(image);
index 2a0f2a8c7d07021603d63b43acc6ea11fef0d3f3..3ba04d45f4da6a5523022f3572e62638442d4e47 100644 (file)
@@ -468,16 +468,16 @@ static Image *ReadPDBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           break;
         for (x=0; x < (ssize_t) image->columns; x+=4)
         {
-          index=ConstrainColormapIndex(image,3UL-((*p >> 6) & 0x03));
+          index=ConstrainColormapIndex(image,3UL-((*p >> 6) & 0x03),exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,3UL-((*p >> 4) & 0x03));
+          index=ConstrainColormapIndex(image,3UL-((*p >> 4) & 0x03),exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,3UL-((*p >> 2) & 0x03));
+          index=ConstrainColormapIndex(image,3UL-((*p >> 2) & 0x03),exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,3UL-((*p) & 0x03));
+          index=ConstrainColormapIndex(image,3UL-((*p) & 0x03),exception);
           SetPixelIndex(image,index,q);
           p++;
           q+=GetPixelChannels(image);
@@ -504,10 +504,10 @@ static Image *ReadPDBImage(const ImageInfo *image_info,ExceptionInfo *exception)
           break;
         for (x=0; x < (ssize_t) image->columns; x+=2)
         {
-          index=ConstrainColormapIndex(image,15UL-((*p >> 4) & 0x0f));
+          index=ConstrainColormapIndex(image,15UL-((*p >> 4) & 0x0f),exception);
           SetPixelIndex(image,index,q);
           q+=GetPixelChannels(image);
-          index=ConstrainColormapIndex(image,15UL-((*p) & 0x0f));
+          index=ConstrainColormapIndex(image,15UL-((*p) & 0x0f),exception);
           SetPixelIndex(image,index,q);
           p++;
           q+=GetPixelChannels(image);
index 4a805ffdbdb7df347728e6798af2e1717b63dd4c..95c2f1c07bb987366bbb43bfecf8281316475417 100644 (file)
@@ -427,7 +427,8 @@ static unsigned char *ExpandBuffer(unsigned char *pixels,
 }
 
 static unsigned char *DecodeImage(Image *blob,Image *image,
-  size_t bytes_per_line,const unsigned int bits_per_pixel,size_t *extent)
+  size_t bytes_per_line,const unsigned int bits_per_pixel,size_t *extent,
+  ExceptionInfo *exception)
 {
   MagickSizeType
     number_pixels;
@@ -501,7 +502,7 @@ static unsigned char *DecodeImage(Image *blob,Image *image,
         p=ExpandBuffer(scanline,&number_pixels,bits_per_pixel);
         if ((q+number_pixels) > (pixels+(*extent)))
           {
-            (void) ThrowMagickException(&image->exception,GetMagickModule(),
+            (void) ThrowMagickException(exception,GetMagickModule(),
               CorruptImageError,"UnableToUncompressImage","`%s'",
               image->filename);
             break;
@@ -523,7 +524,7 @@ static unsigned char *DecodeImage(Image *blob,Image *image,
       scanline_length=1UL*ReadBlobByte(blob);
     if (scanline_length >= row_bytes)
       {
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
+        (void) ThrowMagickException(exception,GetMagickModule(),
           CorruptImageError,"UnableToUncompressImage","`%s'",image->filename);
         break;
       }
@@ -1144,10 +1145,11 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
               }
             if ((code != 0x9a) && (code != 0x9b) &&
                 (bytes_per_line & 0x8000) == 0)
-              pixels=DecodeImage(image,tile_image,1UL*bytes_per_line,1,&extent);
+              pixels=DecodeImage(image,tile_image,1UL*bytes_per_line,1,&extent,
+                exception);
             else
               pixels=DecodeImage(image,tile_image,1UL*bytes_per_line,1U*
-                pixmap.bits_per_pixel,&extent);
+                pixmap.bits_per_pixel,&extent,exception);
             if (pixels == (unsigned char *) NULL)
               {
                 tile_image=DestroyImage(tile_image);
@@ -1170,7 +1172,7 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
               {
                 if (tile_image->storage_class == PseudoClass)
                   {
-                    index=ConstrainColormapIndex(tile_image,*p);
+                    index=ConstrainColormapIndex(tile_image,*p,exception);
                     SetPixelIndex(tile_image,index,q);
                     SetPixelRed(tile_image,
                       tile_image->colormap[(ssize_t) index].red,q);
index a6cfe10ace80ee8450543aad1df91d5603196670..914c284ac1b2d893c6bcdbcf75a2e56cd84cc855 100644 (file)
@@ -98,18 +98,14 @@ static inline size_t MagickMax(const size_t x,const size_t y)
 }
 
 static inline void PlasmaPixel(Image *image,RandomInfo *random_info,double x,
-  double y)
+  double y,ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   QuantumAny
     range;
 
   register Quantum
     *q;
 
-  exception=(&image->exception);
   q=GetAuthenticPixels(image,(ssize_t) ceil(x-0.5),(ssize_t) ceil(y-0.5),1,1,
     exception);
   if (q == (Quantum *) NULL)
@@ -193,20 +189,20 @@ static Image *ReadPlasmaImage(const ImageInfo *image_info,
         Seed pixels before recursion.
       */
       random_info=AcquireRandomInfo();
-      PlasmaPixel(image,random_info,segment_info.x1,segment_info.y1);
+      PlasmaPixel(image,random_info,segment_info.x1,segment_info.y1,exception);
       PlasmaPixel(image,random_info,segment_info.x1,(segment_info.y1+
-        segment_info.y2)/2);
-      PlasmaPixel(image,random_info,segment_info.x1,segment_info.y2);
+        segment_info.y2)/2,exception);
+      PlasmaPixel(image,random_info,segment_info.x1,segment_info.y2,exception);
       PlasmaPixel(image,random_info,(segment_info.x1+segment_info.x2)/2,
-        segment_info.y1);
+        segment_info.y1,exception);
       PlasmaPixel(image,random_info,(segment_info.x1+segment_info.x2)/2,
-        (segment_info.y1+segment_info.y2)/2);
+        (segment_info.y1+segment_info.y2)/2,exception);
       PlasmaPixel(image,random_info,(segment_info.x1+segment_info.x2)/2,
-        segment_info.y2);
-      PlasmaPixel(image,random_info,segment_info.x2,segment_info.y1);
+        segment_info.y2,exception);
+      PlasmaPixel(image,random_info,segment_info.x2,segment_info.y1,exception);
       PlasmaPixel(image,random_info,segment_info.x2,(segment_info.y1+
-        segment_info.y2)/2);
-      PlasmaPixel(image,random_info,segment_info.x2,segment_info.y2);
+        segment_info.y2)/2,exception);
+      PlasmaPixel(image,random_info,segment_info.x2,segment_info.y2,exception);
       random_info=DestroyRandomInfo(random_info);
     }
   i=(size_t) MagickMax(image->columns,image->rows)/2;
index e67d6841daba84817b2d0257ae879105d2343d1f..1dfb11c0c85bbf097f5adfa42c7c41cf745d1d1a 100644 (file)
@@ -947,7 +947,7 @@ static MagickBooleanType
 
 #if (MAGICKCORE_QUANTUM_DEPTH >= 16)
 static MagickBooleanType
-LosslessReduceDepthOK(Image *image)
+LosslessReduceDepthOK(Image *image,ExceptionInfo *exception)
 {
     /* Reduce bit depth if it can be reduced losslessly from 16+ to 8.
      *
@@ -1009,7 +1009,7 @@ LosslessReduceDepthOK(Image *image)
 
             for (y=0; y < (ssize_t) image->rows; y++)
             {
-              p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+              p=GetVirtualPixels(image,0,y,image->columns,1,exception);
 
               if (p == (const Quantum *) NULL)
                 {
@@ -1127,7 +1127,7 @@ static inline ssize_t MagickMin(const ssize_t x,const ssize_t y)
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 */
-static MagickBooleanType ImageIsGray(Image *image)
+static MagickBooleanType ImageIsGray(Image *image,ExceptionInfo *exception)
 {
   register const Quantum
     *p;
@@ -1151,7 +1151,7 @@ static MagickBooleanType ImageIsGray(Image *image)
     }
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    p=GetVirtualPixels(image,0,y,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       return(MagickFalse);
     for (x=(ssize_t) image->columns-1; x >= 0; x--)
@@ -1720,19 +1720,35 @@ static long mng_get_long(unsigned char *p)
   return((long) ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]));
 }
 
+typedef struct _PNGErrorInfo
+{
+  Image
+    *image;
+
+  ExceptionInfo
+    *exception;
+} PNGErrorInfo;
+
 static void MagickPNGErrorHandler(png_struct *ping,png_const_charp message)
 {
+  ExceptionInfo
+    *exception;
+
   Image
     *image;
 
-  image=(Image *) png_get_error_ptr(ping);
+  PNGErrorInfo
+    *error_info;
 
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-      "  libpng-%s error: %s", PNG_LIBPNG_VER_STRING,message);
+  error_info=(PNGErrorInfo *) png_get_error_ptr(ping);
+  image=error_info->image;
+  exception=error_info->exception;
 
-  (void) ThrowMagickException(&image->exception,GetMagickModule(),CoderError,
-    message,"`%s'",image->filename);
+  (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+    "  libpng-%s error: %s", PNG_LIBPNG_VER_STRING,message);
+
+  (void) ThrowMagickException(exception,GetMagickModule(),CoderError,message,
+    "`%s'",image->filename);
 
 #if (PNG_LIBPNG_VER < 10500)
   /* A warning about deprecated use of jmpbuf here is unavoidable if you
@@ -1746,18 +1762,25 @@ static void MagickPNGErrorHandler(png_struct *ping,png_const_charp message)
 
 static void MagickPNGWarningHandler(png_struct *ping,png_const_charp message)
 {
+  ExceptionInfo
+    *exception;
+
   Image
     *image;
 
+  PNGErrorInfo
+    *error_info;
+
   if (LocaleCompare(message, "Missing PLTE before tRNS") == 0)
     png_error(ping, message);
 
-  image=(Image *) png_get_error_ptr(ping);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-      "  libpng-%s warning: %s", PNG_LIBPNG_VER_STRING,message);
+  error_info=(PNGErrorInfo *) png_get_error_ptr(ping);
+  image=error_info->image;
+  exception=error_info->exception;
+  (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+    "  libpng-%s warning: %s", PNG_LIBPNG_VER_STRING,message);
 
-  (void) ThrowMagickException(&image->exception,GetMagickModule(),CoderWarning,
+  (void) ThrowMagickException(exception,GetMagickModule(),CoderWarning,
     message,"`%s'",image->filename);
 }
 
@@ -1844,7 +1867,7 @@ Magick_png_read_raw_profile(Image *image, const ImageInfo *image_info,
   /* allocate space */
   if (length == 0)
   {
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
+    (void) ThrowMagickException(exception,GetMagickModule(),
       CoderWarning,"UnableToCopyProfile","`%s'","invalid profile length");
     return(MagickFalse);
   }
@@ -1853,7 +1876,7 @@ Magick_png_read_raw_profile(Image *image, const ImageInfo *image_info,
 
   if (profile == (StringInfo *) NULL)
   {
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
+    (void) ThrowMagickException(exception,GetMagickModule(),
       ResourceLimitError,"MemoryAllocationFailed","`%s'",
       "unable to copy profile");
     return(MagickFalse);
@@ -1869,7 +1892,7 @@ Magick_png_read_raw_profile(Image *image, const ImageInfo *image_info,
     {
       if (*sp == '\0')
         {
-          (void) ThrowMagickException(&image->exception,GetMagickModule(),
+          (void) ThrowMagickException(exception,GetMagickModule(),
             CoderWarning,"UnableToCopyProfile","`%s'","ran out of data");
           profile=DestroyStringInfo(profile);
           return(MagickFalse);
@@ -2000,13 +2023,16 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
   double
     file_gamma;
 
-  PixelInfo
-    transparent_color;
-
   MagickBooleanType
     logging,
     status;
 
+  PixelInfo
+    transparent_color;
+
+  PNGErrorInfo
+    error_info;
+
   png_bytep
      ping_trans_alpha;
 
@@ -2115,11 +2141,13 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
     Allocate the PNG structures
   */
 #ifdef PNG_USER_MEM_SUPPORTED
- ping=png_create_read_struct_2(PNG_LIBPNG_VER_STRING, image,
+ error_info.image=image;
+ error_info.exception=exception;
+ ping=png_create_read_struct_2(PNG_LIBPNG_VER_STRING,&error_info,
    MagickPNGErrorHandler,MagickPNGWarningHandler, NULL,
    (png_malloc_ptr) Magick_png_malloc,(png_free_ptr) Magick_png_free);
 #else
-  ping=png_create_read_struct(PNG_LIBPNG_VER_STRING,image,
+  ping=png_create_read_struct(PNG_LIBPNG_VER_STRING,&error_info,
     MagickPNGErrorHandler,MagickPNGWarningHandler);
 #endif
   if (ping == (png_struct *) NULL)
@@ -2158,7 +2186,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
 
       if (image != (Image *) NULL)
         {
-          InheritException(exception,&image->exception);
+          InheritException(exception,exception);
           image->columns=0;
         }
 
@@ -2299,7 +2327,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
           profile=BlobToStringInfo(info,profile_length);
           if (profile == (StringInfo *) NULL)
           {
-            (void) ThrowMagickException(&image->exception,GetMagickModule(),
+            (void) ThrowMagickException(exception,GetMagickModule(),
               ResourceLimitError,"MemoryAllocationFailed","`%s'",
               "unable to copy profile");
             return((Image *) NULL);
@@ -2455,7 +2483,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
                   {
                     if (mng_info->global_trns_length >
                         mng_info->global_plte_length)
-                      (void) ThrowMagickException(&image->exception,
+                      (void) ThrowMagickException(exception,
                         GetMagickModule(),CoderError,
                         "global tRNS has more entries than global PLTE",
                         "`%s'",image_info->filename);
@@ -2496,7 +2524,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
 #endif
                 }
               else
-                (void) ThrowMagickException(&image->exception,GetMagickModule(),
+                (void) ThrowMagickException(exception,GetMagickModule(),
                   CoderError,"No global PLTE in file","`%s'",
                   image_info->filename);
             }
@@ -2846,7 +2874,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
 
       if (image != (Image *) NULL)
         {
-          InheritException(exception,&image->exception);
+          InheritException(exception,exception);
           image->columns=0;
         }
 
@@ -3362,7 +3390,7 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
               sizeof(*value));
             if (value == (char *) NULL)
               {
-                (void) ThrowMagickException(&image->exception,GetMagickModule(),
+                (void) ThrowMagickException(exception,GetMagickModule(),
                   ResourceLimitError,"MemoryAllocationFailed","`%s'",
                   image->filename);
                 break;
@@ -3417,12 +3445,12 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
           mng_info->ob[object_id]->frozen)
         {
           if (mng_info->ob[object_id] == (MngBuffer *) NULL)
-            (void) ThrowMagickException(&image->exception,GetMagickModule(),
+            (void) ThrowMagickException(exception,GetMagickModule(),
               ResourceLimitError,"MemoryAllocationFailed","`%s'",
               image->filename);
 
           if (mng_info->ob[object_id]->frozen)
-            (void) ThrowMagickException(&image->exception,GetMagickModule(),
+            (void) ThrowMagickException(exception,GetMagickModule(),
               ResourceLimitError,"Cannot overwrite frozen MNG object buffer",
               "`%s'",image->filename);
         }
@@ -3435,13 +3463,13 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
                 (mng_info->ob[object_id]->image);
 
           mng_info->ob[object_id]->image=CloneImage(image,0,0,MagickTrue,
-            &image->exception);
+            exception);
 
           if (mng_info->ob[object_id]->image != (Image *) NULL)
             mng_info->ob[object_id]->image->file=(FILE *) NULL;
 
           else
-            (void) ThrowMagickException(&image->exception,GetMagickModule(),
+            (void) ThrowMagickException(exception,GetMagickModule(),
               ResourceLimitError,"Cloning image for object buffer failed",
               "`%s'",image->filename);
 
@@ -4335,7 +4363,7 @@ static Image *ReadOneJNGImage(MngInfo *mng_info,
 
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    s=GetVirtualPixels(jng_image,0,y,image->columns,1,&image->exception);
+    s=GetVirtualPixels(jng_image,0,y,image->columns,1,exception);
     q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
     for (x=(ssize_t) image->columns; x != 0; x--)
     {
@@ -4382,7 +4410,7 @@ static Image *ReadOneJNGImage(MngInfo *mng_info,
            for (y=0; y < (ssize_t) image->rows; y++)
            {
              s=GetVirtualPixels(jng_image,0,y,image->columns,1,
-               &image->exception);
+               exception);
              q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
 
              if (image->matte != MagickFalse)
@@ -4804,7 +4832,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
             skip_to_iend=MagickTrue;
 
             if (mng_info->jhdr_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"JNGCompressNotSupported","`%s'",image->filename);
 
             mng_info->jhdr_warning++;
@@ -4815,7 +4843,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
             skip_to_iend=MagickTrue;
 
             if (mng_info->dhdr_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"DeltaPNGNotSupported","`%s'",image->filename);
 
             mng_info->dhdr_warning++;
@@ -4957,14 +4985,14 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_DEFI,4) == 0)
           {
             if (mng_type == 3)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"DEFI chunk found in MNG-VLC datastream","`%s'",
                 image->filename);
 
             object_id=(p[0] << 8) | p[1];
 
             if (mng_type == 2 && object_id != 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"Nonzero object_id in MNG-LC datastream","`%s'",
                 image->filename);
 
@@ -4974,7 +5002,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
                   Instead ofsuing a warning we should allocate a larger
                   MngInfo structure and continue.
                 */
-                (void) ThrowMagickException(&image->exception,GetMagickModule(),
+                (void) ThrowMagickException(exception,GetMagickModule(),
                   CoderError,"object id too large","`%s'",image->filename);
                 object_id=MNG_MAX_OBJECTS;
               }
@@ -4983,7 +5011,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
               if (mng_info->frozen[object_id])
                 {
                   chunk=(unsigned char *) RelinquishMagickMemory(chunk);
-                  (void) ThrowMagickException(&image->exception,
+                  (void) ThrowMagickException(exception,
                     GetMagickModule(),CoderError,
                     "DEFI cannot redefine a frozen MNG object","`%s'",
                     image->filename);
@@ -5215,7 +5243,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_FRAM,4) == 0)
           {
             if (mng_type == 3)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"FRAM chunk found in MNG-VLC datastream","`%s'",
                 image->filename);
 
@@ -5581,7 +5609,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_CLON,4) == 0)
           {
             if (mng_info->clon_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"CLON is not implemented yet","`%s'",
                 image->filename);
 
@@ -5617,7 +5645,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
             if (magn_first || magn_last)
               if (mng_info->magn_warning == 0)
                 {
-                  (void) ThrowMagickException(&image->exception,
+                  (void) ThrowMagickException(exception,
                      GetMagickModule(),CoderError,
                      "MAGN is not implemented yet for nonzero objects",
                      "`%s'",image->filename);
@@ -5695,7 +5723,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
             if (magn_methx > 5 || magn_methy > 5)
               if (mng_info->magn_warning == 0)
                 {
-                  (void) ThrowMagickException(&image->exception,
+                  (void) ThrowMagickException(exception,
                      GetMagickModule(),CoderError,
                      "Unknown MAGN method in MNG datastream","`%s'",
                      image->filename);
@@ -5722,7 +5750,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_PAST,4) == 0)
           {
             if (mng_info->past_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"PAST is not implemented yet","`%s'",
                 image->filename);
 
@@ -5732,7 +5760,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_SHOW,4) == 0)
           {
             if (mng_info->show_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"SHOW is not implemented yet","`%s'",
                 image->filename);
 
@@ -5772,7 +5800,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (memcmp(type,mng_pHYg,4) == 0)
           {
             if (mng_info->phyg_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"pHYg is not implemented.","`%s'",image->filename);
 
             mng_info->phyg_warning++;
@@ -5782,7 +5810,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
             skip_to_iend=MagickTrue;
 
             if (mng_info->basi_warning == 0)
-              (void) ThrowMagickException(&image->exception,GetMagickModule(),
+              (void) ThrowMagickException(exception,GetMagickModule(),
                 CoderError,"BASI is not implemented yet","`%s'",
                 image->filename);
 
@@ -6721,12 +6749,10 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
 #endif
 
 #if (MAGICKCORE_QUANTUM_DEPTH > 8)
-      if (LosslessReduceDepthOK(image) != MagickFalse)
+      if (LosslessReduceDepthOK(image,exception) != MagickFalse)
          image->depth = 8;
 #endif
 
-      GetImageException(image,exception);
-
       if (image_info->number_scenes != 0)
         {
           if (mng_info->scenes_found >
@@ -6804,7 +6830,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (logging != MagickFalse)
           (void) LogMagickEvent(CoderEvent,GetMagickModule(),"  No beginning");
 
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
+        (void) ThrowMagickException(exception,GetMagickModule(),
           CoderError,"Linked list is corrupted, beginning of list not found",
           "`%s'",image_info->filename);
 
@@ -6818,7 +6844,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         if (logging != MagickFalse)
           (void) LogMagickEvent(CoderEvent,GetMagickModule(),"  Corrupt list");
 
-        (void) ThrowMagickException(&image->exception,GetMagickModule(),
+        (void) ThrowMagickException(exception,GetMagickModule(),
           CoderError,"Linked list is corrupted; next_image is NULL","`%s'",
           image_info->filename);
       }
@@ -6832,7 +6858,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         (void) LogMagickEvent(CoderEvent,GetMagickModule(),
             "  First image null");
 
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
+      (void) ThrowMagickException(exception,GetMagickModule(),
         CoderError,"image->next for first image is NULL but shouldn't be.",
         "`%s'",image_info->filename);
     }
@@ -6843,7 +6869,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         (void) LogMagickEvent(CoderEvent,GetMagickModule(),
           "  No visible images found.");
 
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
+      (void) ThrowMagickException(exception,GetMagickModule(),
         CoderError,"No visible images in file","`%s'",image_info->filename);
 
       if (image != (Image *) NULL)
@@ -6918,7 +6944,7 @@ static Image *ReadMNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
         (void) LogMagickEvent(CoderEvent,GetMagickModule(),"  Coalesce Images");
 
       scene=image->scene;
-      next_image=CoalesceImages(image,&image->exception);
+      next_image=CoalesceImages(image,exception);
 
       if (next_image == (Image *) NULL)
         ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
@@ -7517,6 +7543,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
   QuantumInfo
     *quantum_info;
 
+  PNGErrorInfo
+    error_info;
+
   register ssize_t
     i,
     x;
@@ -7557,7 +7586,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
   logging=LogMagickEvent(CoderEvent,GetMagickModule(),
     "  Enter WriteOnePNGImage()");
 
-  image = CloneImage(IMimage,0,0,MagickFalse,&IMimage->exception);
+  image = CloneImage(IMimage,0,0,MagickFalse,exception);
   image_info=(ImageInfo *) CloneImageInfo(IMimage_info);
   if (image_info == (ImageInfo *) NULL)
      ThrowWriterException(ResourceLimitError, "MemoryAllocationFailed");
@@ -7761,11 +7790,6 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
        register Quantum
          *r;
 
-       ExceptionInfo
-         *exception;
-
-       exception=(&image->exception);
-
        if (image->depth > 8)
          {
 #if MAGICKCORE_QUANTUM_DEPTH > 16
@@ -7808,8 +7832,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
            for (y=0; y < (ssize_t) image->rows; y++)
            {
-             r=GetAuthenticPixels(image,0,y,image->columns,1,
-                 exception);
+             r=GetAuthenticPixels(image,0,y,image->columns,1,exception);
 
              if (r == (Quantum *) NULL)
                break;
@@ -7944,7 +7967,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
 #if (MAGICKCORE_QUANTUM_DEPTH > 8)
   if (image->depth == 16 && mng_info->write_png_depth != 16)
-    if (mng_info->write_png8 || LosslessReduceDepthOK(image) != MagickFalse)
+    if (mng_info->write_png8 || LosslessReduceDepthOK(image,exception) != MagickFalse)
       image->depth = 8;
 #endif
 
@@ -7985,9 +8008,6 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
      * we need to check for bogus non-opaque values, at least.
      */
 
-   ExceptionInfo
-     *exception;
-
    int
      n;
 
@@ -8063,8 +8083,6 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
               "      Regenerate the colormap");
      }
 
-     exception=(&image->exception);
-
      image_colors=0;
      number_opaque = 0;
      number_semitransparent = 0;
@@ -8782,14 +8800,9 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
        else if (image_colors == 0 || image_colors > 256 ||
            image->colormap == NULL)
          {
-           ExceptionInfo
-             *exception;
-
            register const Quantum
              *q;
 
-           exception=(&image->exception);
-
            for (y=0; y < (ssize_t) image->rows; y++)
            {
              q=GetVirtualPixels(image,0,y,image->columns,1, exception);
@@ -8863,8 +8876,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
     {
       image_info=DestroyImageInfo(image_info);
       image=DestroyImage(image);
-      (void) ThrowMagickException(&IMimage->exception,
-          GetMagickModule(),CoderError,
+      (void) ThrowMagickException(exception,GetMagickModule(),CoderError,
           "Cannot write PNG8 or color-type 3; colormap is NULL",
           "`%s'",IMimage->filename);
 #if defined(PNG_SETJMP_NOT_THREAD_SAFE)
@@ -8877,12 +8889,14 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
     Allocate the PNG structures
   */
 #ifdef PNG_USER_MEM_SUPPORTED
-  ping=png_create_write_struct_2(PNG_LIBPNG_VER_STRING,image,
+ error_info.image=image;
+ error_info.exception=exception;
+  ping=png_create_write_struct_2(PNG_LIBPNG_VER_STRING,&error_info,
     MagickPNGErrorHandler,MagickPNGWarningHandler,(void *) NULL,
     (png_malloc_ptr) Magick_png_malloc,(png_free_ptr) Magick_png_free);
 
 #else
-  ping=png_create_write_struct(PNG_LIBPNG_VER_STRING,image,
+  ping=png_create_write_struct(PNG_LIBPNG_VER_STRING,&error_info,
     MagickPNGErrorHandler,MagickPNGWarningHandler);
 
 #endif
@@ -9273,7 +9287,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
            if (image->colors == 0)
            {
               /* DO SOMETHING */
-              (void) ThrowMagickException(&image->exception,
+              (void) ThrowMagickException(exception,
                  GetMagickModule(),CoderError,
                 "image has 0 colors", "`%s'","");
            }
@@ -10189,7 +10203,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
   if (mng_info->need_blob != MagickFalse)
   {
-    if (OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception) ==
+    if (OpenBlob(image_info,image,WriteBinaryBlobMode,exception) ==
        MagickFalse)
        png_error(ping,"WriteBlob Failed");
 
@@ -10359,7 +10373,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
              (void) LogMagickEvent(CoderEvent,GetMagickModule(),
                  "    Writing row of pixels (0)");
 
-          p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+          p=GetVirtualPixels(image,0,y,image->columns,1,exception);
 
           if (p == (const Quantum *) NULL)
             break;
@@ -10367,7 +10381,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
           if (mng_info->IsPalette)
             {
               (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                quantum_info,GrayQuantum,ping_pixels,&image->exception);
+                quantum_info,GrayQuantum,ping_pixels,exception);
               if (mng_info->write_png_colortype-1 == PNG_COLOR_TYPE_PALETTE &&
                   mng_info->write_png_depth &&
                   mng_info->write_png_depth != old_bit_depth)
@@ -10382,7 +10396,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
           else
             {
               (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                quantum_info,RedQuantum,ping_pixels,&image->exception);
+                quantum_info,RedQuantum,ping_pixels,exception);
             }
 
           if (mng_info->write_png_colortype-1 != PNG_COLOR_TYPE_PALETTE)
@@ -10421,7 +10435,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
           for (y=0; y < (ssize_t) image->rows; y++)
           {
-            p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+            p=GetVirtualPixels(image,0,y,image->columns,1,exception);
 
             if (p == (const Quantum *) NULL)
               break;
@@ -10430,11 +10444,11 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
               {
                 if (mng_info->IsPalette)
                   (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                    quantum_info,GrayQuantum,ping_pixels,&image->exception);
+                    quantum_info,GrayQuantum,ping_pixels,exception);
 
                 else
                   (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                    quantum_info,RedQuantum,ping_pixels,&image->exception);
+                    quantum_info,RedQuantum,ping_pixels,exception);
 
                 if (logging != MagickFalse && y == 0)
                   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -10448,7 +10462,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
                          "    Writing GRAY_ALPHA PNG pixels (2)");
 
                 (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                  quantum_info,GrayAlphaQuantum,ping_pixels,&image->exception);
+                  quantum_info,GrayAlphaQuantum,ping_pixels,exception);
               }
 
             if (logging != MagickFalse && y == 0)
@@ -10481,7 +10495,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
               for (y=0; y < (ssize_t) image->rows; y++)
               {
                 p=GetVirtualPixels(image,0,y,image->columns,1,
-                   &image->exception);
+                   exception);
 
                 if (p == (const Quantum *) NULL)
                   break;
@@ -10490,18 +10504,18 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
                   {
                     if (image->storage_class == DirectClass)
                       (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                        quantum_info,RedQuantum,ping_pixels,&image->exception);
+                        quantum_info,RedQuantum,ping_pixels,exception);
 
                     else
                       (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                        quantum_info,GrayQuantum,ping_pixels,&image->exception);
+                        quantum_info,GrayQuantum,ping_pixels,exception);
                   }
 
                 else if (ping_color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
                   {
                     (void) ExportQuantumPixels(image,(CacheView *) NULL,
                       quantum_info,GrayAlphaQuantum,ping_pixels,
-                      &image->exception);
+                      exception);
 
                     if (logging != MagickFalse && y == 0)
                       (void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -10510,11 +10524,11 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
                 else if (image_matte != MagickFalse)
                   (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                    quantum_info,RGBAQuantum,ping_pixels,&image->exception);
+                    quantum_info,RGBAQuantum,ping_pixels,exception);
 
                 else
                   (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                    quantum_info,RGBQuantum,ping_pixels,&image->exception);
+                    quantum_info,RGBQuantum,ping_pixels,exception);
 
                 if (logging != MagickFalse && y == 0)
                   (void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -10547,7 +10561,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
                     "  pass %d, Image Is RGB, 16-bit GRAY, or GRAY_ALPHA",pass);
 
                 p=GetVirtualPixels(image,0,y,image->columns,1,
-                   &image->exception);
+                   exception);
 
                 if (p == (const Quantum *) NULL)
                   break;
@@ -10557,7 +10571,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
                     quantum_info->depth=image->depth;
 
                     (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                       quantum_info,GrayQuantum,ping_pixels,&image->exception);
+                       quantum_info,GrayQuantum,ping_pixels,exception);
                   }
 
                 else if (ping_color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
@@ -10568,13 +10582,13 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
 
                     (void) ExportQuantumPixels(image,(CacheView *) NULL,
                          quantum_info,GrayAlphaQuantum,ping_pixels,
-                         &image->exception);
+                         exception);
                   }
 
                 else
                   {
                     (void) ExportQuantumPixels(image,(CacheView *) NULL,
-                      quantum_info,IndexQuantum,ping_pixels,&image->exception);
+                      quantum_info,IndexQuantum,ping_pixels,exception);
 
                     if (logging != MagickFalse && y <= 2)
                     {
@@ -10748,7 +10762,7 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
     }
   if (mng_info->write_mng && !mng_info->need_fram &&
       ((int) image->dispose == 3))
-     (void) ThrowMagickException(&image->exception,GetMagickModule(),
+     (void) ThrowMagickException(exception,GetMagickModule(),
        CoderError,"Cannot convert GIF with disposal method 3 to MNG-LC",
        "`%s'",image->filename);
 
@@ -11038,7 +11052,7 @@ static MagickBooleanType WritePNGImage(const ImageInfo *image_info,
         mng_info->write_png_depth = 16;
 
       else
-        (void) ThrowMagickException(&image->exception,
+        (void) ThrowMagickException(exception,
              GetMagickModule(),CoderWarning,
              "ignoring invalid defined png:bit-depth",
              "=%s",value);
@@ -11069,7 +11083,7 @@ static MagickBooleanType WritePNGImage(const ImageInfo *image_info,
         mng_info->write_png_colortype = 7;
 
       else
-        (void) ThrowMagickException(&image->exception,
+        (void) ThrowMagickException(exception,
              GetMagickModule(),CoderWarning,
              "ignoring invalid defined png:color-type",
              "=%s",value);
@@ -11181,7 +11195,7 @@ static MagickBooleanType WritePNGImage(const ImageInfo *image_info,
         mng_info->write_png_compression_level = 10;
 
       else
-        (void) ThrowMagickException(&image->exception,
+        (void) ThrowMagickException(exception,
              GetMagickModule(),CoderWarning,
              "ignoring invalid defined png:compression-level",
              "=%s",value);
@@ -11217,7 +11231,7 @@ static MagickBooleanType WritePNGImage(const ImageInfo *image_info,
 #endif
 
       else
-        (void) ThrowMagickException(&image->exception,
+        (void) ThrowMagickException(exception,
              GetMagickModule(),CoderWarning,
              "ignoring invalid defined png:compression-strategy",
              "=%s",value);
@@ -11255,7 +11269,7 @@ static MagickBooleanType WritePNGImage(const ImageInfo *image_info,
         mng_info->write_png_compression_filter = 6;
 
       else
-        (void) ThrowMagickException(&image->exception,
+        (void) ThrowMagickException(exception,
              GetMagickModule(),CoderWarning,
              "ignoring invalid defined png:compression-filter",
              "=%s",value);
@@ -11669,7 +11683,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
         (void) LogMagickEvent(CoderEvent,GetMagickModule(),
           "  Creating jpeg_image.");
 
-      jpeg_image=CloneImage(image,0,0,MagickTrue,&image->exception);
+      jpeg_image=CloneImage(image,0,0,MagickTrue,exception);
 
       if (jpeg_image == (Image *) NULL)
         ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
@@ -11697,7 +11711,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
 
   /* Check if image is grayscale. */
   if (image_info->type != TrueColorMatteType && image_info->type !=
-    TrueColorType && ImageIsGray(image))
+    TrueColorType && ImageIsGray(image,exception))
     jng_color_type-=2;
 
   if (transparent)
@@ -11709,7 +11723,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
 
           /* Encode alpha as a grayscale PNG blob */
           status=OpenBlob(jpeg_image_info,jpeg_image,WriteBinaryBlobMode,
-            &image->exception);
+            exception);
           if (logging != MagickFalse)
             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
               "  Creating PNG blob.");
@@ -11720,7 +11734,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
           jpeg_image_info->interlace=NoInterlace;
 
           blob=ImageToBlob(jpeg_image_info,jpeg_image,&length,
-            &image->exception);
+            exception);
 
           /* Retrieve sample depth used */
           value=GetImageProperty(jpeg_image,"png:bit-depth-written",exception);
@@ -11732,7 +11746,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
           /* Encode alpha as a grayscale JPEG blob */
 
           status=OpenBlob(jpeg_image_info,jpeg_image,WriteBinaryBlobMode,
-            &image->exception);
+            exception);
 
           (void) CopyMagickString(jpeg_image_info->magick,"JPEG",MaxTextExtent);
           (void) CopyMagickString(jpeg_image->magick,"JPEG",MaxTextExtent);
@@ -11741,7 +11755,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
               "  Creating blob.");
           blob=ImageToBlob(jpeg_image_info,jpeg_image,&length,
-           &image->exception);
+           exception);
           jng_alpha_sample_depth=8;
 
           if (logging != MagickFalse)
@@ -12056,7 +12070,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
       "  Creating jpeg_image.");
 
-  jpeg_image=CloneImage(image,0,0,MagickTrue,&image->exception);
+  jpeg_image=CloneImage(image,0,0,MagickTrue,exception);
   if (jpeg_image == (Image *) NULL)
     ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
   (void) CopyMagickString(jpeg_image->magick,"JPEG",MaxTextExtent);
@@ -12066,7 +12080,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
     jpeg_image->filename);
 
   status=OpenBlob(jpeg_image_info,jpeg_image,WriteBinaryBlobMode,
-    &image->exception);
+    exception);
 
   if (logging != MagickFalse)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -12084,7 +12098,7 @@ static MagickBooleanType WriteOneJNGImage(MngInfo *mng_info,
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
       "  Creating blob.");
 
-  blob=ImageToBlob(jpeg_image_info,jpeg_image,&length,&image->exception);
+  blob=ImageToBlob(jpeg_image_info,jpeg_image,&length,exception);
 
   if (logging != MagickFalse)
     {
@@ -12177,7 +12191,7 @@ static MagickBooleanType WriteJNGImage(const ImageInfo *image_info,Image *image,
   assert(image->signature == MagickSignature);
   (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   logging=LogMagickEvent(CoderEvent,GetMagickModule(),"Enter WriteJNGImage()");
-  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
 
@@ -12273,7 +12287,7 @@ static MagickBooleanType WriteMNGImage(const ImageInfo *image_info,Image *image,
   assert(image->signature == MagickSignature);
   (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   logging=LogMagickEvent(CoderEvent,GetMagickModule(),"Enter WriteMNGImage()");
-  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
 
@@ -12460,7 +12474,7 @@ static MagickBooleanType WriteMNGImage(const ImageInfo *image_info,Image *image,
 
         if (need_local_plte == 0)
           {
-            if (ImageIsGray(image) == MagickFalse)
+            if (ImageIsGray(image,exception) == MagickFalse)
               all_images_are_gray=MagickFalse;
             mng_info->equal_palettes=PalettesAreEqual(image,next_image);
             if (use_global_plte == 0)
@@ -12544,8 +12558,8 @@ static MagickBooleanType WriteMNGImage(const ImageInfo *image_info,Image *image,
                  if (mng_info->adjoin)
                    {
                      final_delay=10;
-                     (void) ThrowMagickException(&image->exception,
-                        GetMagickModule(),CoderWarning,
+                     (void) ThrowMagickException(exception,GetMagickModule(),
+                       CoderWarning,
                        "input has zero delay between all frames; assuming",
                        " 10 cs `%s'","");
                    }
index ba155cc46845a01fc3c95383aac13a9e1b5b554d..5b715547e89526df0d03c9fdaaaf17ca4e157d86 100644 (file)
@@ -137,12 +137,12 @@ static MagickBooleanType IsPNM(const unsigned char *magick,const size_t extent)
 */
 
 static inline ssize_t ConstrainPixel(Image *image,const ssize_t offset,
-  const size_t extent)
+  const size_t extent,ExceptionInfo *exception)
 {
   if ((offset < 0) || (offset > (ssize_t) extent))
     {
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        CorruptImageError,"InvalidPixel","`%s'",image->filename);
+      (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+        "InvalidPixel","`%s'",image->filename);
       return(0);
     }
   return(offset);
@@ -500,7 +500,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             SetPixelRed(image,intensity,q);
             if (scale != (Quantum *) NULL)
               SetPixelRed(image,scale[ConstrainPixel(image,(ssize_t) intensity,
-                max_value)],q);
+                max_value,exception)],q);
             SetPixelGreen(image,GetPixelRed(image,q),q);
             SetPixelBlue(image,GetPixelRed(image,q),q);
             q+=GetPixelChannels(image);
@@ -560,11 +560,11 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             if (scale != (Quantum *) NULL)
               {
                 pixel.red=(MagickRealType) scale[ConstrainPixel(image,(ssize_t)
-                  pixel.red,max_value)];
+                  pixel.red,max_value,exception)];
                 pixel.green=(MagickRealType) scale[ConstrainPixel(image,
-                  (ssize_t) pixel.green,max_value)];
+                  (ssize_t) pixel.green,max_value,exception)];
                 pixel.blue=(MagickRealType) scale[ConstrainPixel(image,(ssize_t)
-                  pixel.blue,max_value)];
+                  pixel.blue,max_value,exception)];
               }
             SetPixelRed(image,ClampToQuantum(pixel.red),q);
             SetPixelGreen(image,ClampToQuantum(pixel.green),q);
index dc8d219812e8e922d196ba462c270a6f294f61d3..8267d4f3628f9ad36187d452151de2d93b81bb84 100644 (file)
@@ -682,7 +682,7 @@ static Image *ReadPSImage(const ImageInfo *image_info,ExceptionInfo *exception)
   file=AcquireUniqueFileResource(postscript_filename);
   if (file == -1)
     {
-      ThrowFileException(&image->exception,FileOpenError,"UnableToOpenFile",
+      ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
         image_info->filename);
       image=DestroyImageList(image);
       return((Image *) NULL);
index 1514682157906b15dd09a85360aad87fc682ca12..8df9d622b129a172637c894d5143cf2a47eea925 100644 (file)
@@ -266,7 +266,7 @@ static MagickBooleanType SerializeImage(const ImageInfo *image_info,
   q=(*pixels);
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    p=GetVirtualPixels(image,0,y,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     if (image->colorspace != CMYKColorspace)
@@ -330,7 +330,7 @@ static MagickBooleanType SerializeImageChannel(const ImageInfo *image_info,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   status=MagickTrue;
-  pack=IsImageMonochrome(image,&image->exception) == MagickFalse ? 1UL : 8UL;
+  pack=IsImageMonochrome(image,exception) == MagickFalse ? 1UL : 8UL;
   padded_columns=((image->columns+pack-1)/pack)*pack;
   *length=(size_t) padded_columns*image->rows/pack;
   *pixels=(unsigned char *) AcquireQuantumMemory(*length,sizeof(**pixels));
@@ -518,9 +518,9 @@ static MagickBooleanType WritePS3MaskImage(const ImageInfo *image_info,
   }
   (void) WriteBlobString(image,buffer);
   (void) WriteBlobString(image,"/ReusableStreamDecode filter\n");
-  mask_image=CloneImage(image,0,0,MagickTrue,&image->exception);
+  mask_image=CloneImage(image,0,0,MagickTrue,exception);
   if (mask_image == (Image *) NULL)
-    ThrowWriterException(CoderError,image->exception.reason);
+    ThrowWriterException(CoderError,exception->reason);
   channel_mask=SetPixelChannelMask(mask_image,AlphaChannel);
   status=SeparateImage(mask_image,exception);
   (void) SetPixelChannelMap(mask_image,channel_mask);
index f6d0c6b9640ea76b4bef130fff36a121c6630baf..c1fa4b8e6f94b2f79c47c53fc17f2141b2c386e1 100644 (file)
@@ -826,7 +826,6 @@ static Image *ReadPSDImage(const ImageInfo *image_info,ExceptionInfo *exception)
   image->rows=psd_info.rows;
   if (SetImageBackgroundColor(image,exception) == MagickFalse)
     {
-      InheritException(exception,&image->exception);
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
@@ -1191,7 +1190,7 @@ static Image *ReadPSDImage(const ImageInfo *image_info,ExceptionInfo *exception)
             */
             layer_info[i].image=CloneImage(image,layer_info[i].page.width,
               layer_info[i].page.height == ~0U ? 1 : layer_info[i].page.height,
-              MagickFalse,&image->exception);
+              MagickFalse,exception);
             if (layer_info[i].image == (Image *) NULL)
               {
                 for (j=0; j < i; j++)
@@ -1693,11 +1692,11 @@ static void WritePackbitsLength(const PSDInfo *psd_info,
   pixels=GetQuantumPixels(quantum_info);
   for (y=0; y < (ssize_t) next_image->rows; y++)
   {
-    p=GetVirtualPixels(next_image,0,y,next_image->columns,1,&image->exception);
+    p=GetVirtualPixels(next_image,0,y,next_image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     length=ExportQuantumPixels(next_image,(CacheView *) NULL,quantum_info,
-      quantum_type,pixels,&image->exception);
+      quantum_type,pixels,exception);
     length=PSDPackbitsEncodeImage(image,length,pixels,compact_pixels,
       exception);
     (void) SetPSDOffset(psd_info,image,length);
@@ -1738,19 +1737,19 @@ static void WriteOneChannel(const PSDInfo *psd_info,const ImageInfo *image_info,
     (void) WriteBlobMSBShort(image,0);
   if (next_image->depth > 8)
     next_image->depth=16;
-  monochrome=IsImageMonochrome(image,&image->exception) && (image->depth == 1)
-    MagickTrue : MagickFalse;
+  monochrome=IsImageMonochrome(image,exception) && (image->depth == 1) ?
+    MagickTrue : MagickFalse;
   packet_size=next_image->depth > 8UL ? 2UL : 1UL;
   (void) packet_size;
   quantum_info=AcquireQuantumInfo(image_info,image);
   pixels=GetQuantumPixels(quantum_info);
   for (y=0; y < (ssize_t) next_image->rows; y++)
   {
-    p=GetVirtualPixels(next_image,0,y,next_image->columns,1,&image->exception);
+    p=GetVirtualPixels(next_image,0,y,next_image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     length=ExportQuantumPixels(next_image,(CacheView *) NULL,quantum_info,
-      quantum_type,pixels,&image->exception);
+      quantum_type,pixels,exception);
     if (monochrome != MagickFalse)
       for (i=0; i < (ssize_t) length; i++)
         pixels[i]=(~pixels[i]);
@@ -1794,7 +1793,7 @@ static MagickBooleanType WriteImageChannels(const PSDInfo *psd_info,
         ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
     }
   i=0;
-  if (IsImageGray(next_image,&next_image->exception) != MagickFalse)
+  if (IsImageGray(next_image,exception) != MagickFalse)
     {
       if (next_image->compression == RLECompression)
         {
@@ -1844,7 +1843,7 @@ static MagickBooleanType WriteImageChannels(const PSDInfo *psd_info,
     else
       {
         if (next_image->colorspace == CMYKColorspace)
-          (void) NegateImage(next_image,MagickFalse,&next_image->exception);
+          (void) NegateImage(next_image,MagickFalse,exception);
         if (next_image->compression == RLECompression)
           {
             /*
@@ -1888,7 +1887,7 @@ static MagickBooleanType WriteImageChannels(const PSDInfo *psd_info,
             MagickFalse,exception);
         (void) SetImageProgress(image,SaveImagesTag,5,6);
         if (next_image->colorspace == CMYKColorspace)
-          (void) NegateImage(next_image,MagickFalse,&next_image->exception);
+          (void) NegateImage(next_image,MagickFalse,exception);
       }
   if (next_image->compression == RLECompression)
     compact_pixels=(unsigned char *) RelinquishMagickMemory(compact_pixels);
index 1ab9087158843934ac21c5e4f99224d6b2b62d14..d81f9dee8093b9c1f00afca56afcf1cc16a1edd3 100644 (file)
@@ -267,7 +267,6 @@ static Image *ReadRAWImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index e97a7473df0fad9040cae5e35fd8b5e186e1891f..2259c3862a79f5960ad5127bad4a86f34766cd73 100644 (file)
@@ -951,7 +951,6 @@ static Image *ReadRGBImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index 4c2c51640a65a65e2c986ad4bdfd5e645b2464b3..262ccd07abcff1bf4b054ea2047adfb52c890140 100644 (file)
@@ -329,8 +329,8 @@ static Image *ReadSFWImage(const ImageInfo *image_info,ExceptionInfo *exception)
       (void) remove_utf8(read_info->filename);
       read_info=DestroyImageInfo(read_info);
       message=GetExceptionMessage(errno);
-      (void) ThrowMagickException(&image->exception,GetMagickModule(),
-        FileOpenError,"UnableToWriteFile","`%s': %s",image->filename,message);
+      (void) ThrowMagickException(exception,GetMagickModule(),FileOpenError,
+        "UnableToWriteFile","`%s': %s",image->filename,message);
       message=DestroyString(message);
       image=DestroyImageList(image);
       return((Image *) NULL);
index b860c85c4a70de6edf6d7ec82ce4636b120a3f35..ddaaca4edaa37b8c3e3ef272fd314ce5c7298ef3 100644 (file)
@@ -3300,7 +3300,7 @@ static MagickBooleanType IsPoint(const char *point)
   return(p != point ? MagickTrue : MagickFalse);
 }
 
-static MagickBooleanType TraceSVGImage(Image *image)
+static MagickBooleanType TraceSVGImage(Image *image,ExceptionInfo *exception)
 {
   ssize_t
     y;
@@ -3395,14 +3395,13 @@ static MagickBooleanType TraceSVGImage(Image *image)
     GetPixelInfo(image,&pixel);
     for (y=0; y < (ssize_t) image->rows; y++)
     {
-      p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+      p=GetVirtualPixels(image,0,y,image->columns,1,exception);
       if (p == (const Quantum *) NULL)
         break;
       for (x=0; x < (ssize_t) image->columns; x++)
       {
         SetPixelInfo(image,p,&pixel);
-        (void) QueryColorname(image,&pixel,SVGCompliance,tuple,
-          &image->exception);
+        (void) QueryColorname(image,&pixel,SVGCompliance,tuple,exception);
         (void) FormatLocaleString(message,MaxTextExtent,
           "  <circle cx=\"%.20g\" cy=\"%.20g\" r=\"1\" fill=\"%s\"/>\n",
           (double) x,(double) y,tuple);
@@ -3493,7 +3492,7 @@ static MagickBooleanType WriteSVGImage(const ImageInfo *image_info,Image *image,
     }
   value=GetImageArtifact(image,"MVG");
   if (value == (char *) NULL)
-    return(TraceSVGImage(image));
+    return(TraceSVGImage(image,exception));
   /*
     Write SVG header.
   */
index 850b75ea6f2b6352ba91f521d6c5817cd3a99244..a01dd89a9805133788a817c9148d83f0c2874afd 100644 (file)
@@ -390,7 +390,7 @@ static Image *ReadTGAImage(const ImageInfo *image_info,ExceptionInfo *exception)
             index=(Quantum) ReadBlobByte(image);
             if (tga_info.colormap_type != 0)
               pixel=image->colormap[(ssize_t) ConstrainColormapIndex(image,
-                1UL*index)];
+                1UL*index,exception)];
             else
               {
                 pixel.red=ScaleCharToQuantum((unsigned char) index);
@@ -419,7 +419,7 @@ static Image *ReadTGAImage(const ImageInfo *image_info,ExceptionInfo *exception)
               pixel.alpha=(k & 0x80) == 0 ? (Quantum) OpaqueAlpha :
                 (Quantum) TransparentAlpha; 
             if (image->storage_class == PseudoClass)
-              index=ConstrainColormapIndex(image,((size_t) k << 8)+j);
+              index=ConstrainColormapIndex(image,((size_t) k << 8)+j,exception);
             break;
           }
           case 24:
index 23637f5bd0a1db36ba1a32f93b0ba98fe4fbaf6d..19348e4babf2a4365a63c633aba10f17b51292c8 100644 (file)
@@ -1494,7 +1494,7 @@ static Image *ReadTIFFImage(const ImageInfo *image_info,
             TIFFClose(tiff);
             ThrowReaderException(CoderError,"ImageIsNotTiled");
           }
-        (void) SetImageStorageClass(image,DirectClass,&image->exception);
+        (void) SetImageStorageClass(image,DirectClass,exception);
         number_pixels=columns*rows;
         tile_pixels=(uint32 *) AcquireQuantumMemory(number_pixels,
           sizeof(*tile_pixels));
index 6c32ed2ac77509ddda6184e5d6d6b7aa57ee747e..c5c51cfe34782e173b630304a24b1c032c0ea5b6 100644 (file)
@@ -335,7 +335,7 @@ static MagickBooleanType WriteWEBPImage(const ImageInfo *image_info,
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
   if (WebPPictureInit(&picture) == 0)
@@ -367,7 +367,7 @@ static MagickBooleanType WriteWEBPImage(const ImageInfo *image_info,
   q=pixels;
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
+    p=GetVirtualPixels(image,0,y,image->columns,1,exception);
     if (p == (const Quantum *) NULL)
       break;
     for (x=0; x < (ssize_t) image->columns; x++)
index 3c2719be8ecfe44c27d57b070d664cff3cab1585..257c5e849972e2978b067945d16877943378491b 100644 (file)
@@ -264,11 +264,9 @@ static void Rd_WP_DWORD(Image *image,size_t *d)
   return;
 }
 
-static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
+static void InsertRow(Image *image,unsigned char *p,ssize_t y,int bpp,
+  ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   int
     bit;
 
@@ -281,7 +279,6 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
   ssize_t
     x;
 
-  exception=(&image->exception);
   switch (bpp)
     {
     case 1:  /* Convert bitmap scanline. */
@@ -322,19 +319,19 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
         {
-            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p) & 0x3);
+            index=ConstrainColormapIndex(image,(*p) & 0x3,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             p++;
@@ -342,21 +339,22 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
         }
        if ((image->columns % 4) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
             if ((image->columns % 4) >= 1)
 
               {
-                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
                 SetPixelIndex(image,index,q);
                 SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
                 q+=GetPixelChannels(image);
                 if ((image->columns % 4) >= 2)
 
                   {
-                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,
+                      exception);
                     SetPixelIndex(image,index,q);
                     SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
                     q+=GetPixelChannels(image);
@@ -376,11 +374,11 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
           { 
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p) & 0x0f,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             p++;
@@ -388,7 +386,7 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           }
         if ((image->columns % 2) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             p++;
@@ -405,7 +403,7 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
 
         for (x=0; x < (ssize_t) image->columns; x++)
           {
-            index=ConstrainColormapIndex(image,*p);
+            index=ConstrainColormapIndex(image,*p,exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             p++;
@@ -441,13 +439,13 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
   x++; \
   if((ssize_t) x>=ldblk) \
   { \
-    InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
+    InsertRow(image,BImgBuff,(ssize_t) y,bpp,exception); \
     x=0; \
     y++; \
     } \
 }
 /* WPG1 raster reader. */
-static int UnpackWPGRaster(Image *image,int bpp)
+static int UnpackWPGRaster(Image *image,int bpp,ExceptionInfo *exception)
 {
   int
     x,
@@ -513,7 +511,7 @@ static int UnpackWPGRaster(Image *image,int bpp)
                   BImgBuff=(unsigned char *) RelinquishMagickMemory(BImgBuff);
                   return(-4);
                 }
-              InsertRow(BImgBuff,y-1,image,bpp);
+              InsertRow(image,BImgBuff,y-1,bpp,exception);
             }
         }
       }
@@ -533,13 +531,13 @@ static int UnpackWPGRaster(Image *image,int bpp)
   x++; \
   if((ssize_t) x >= ldblk) \
   { \
-    InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
+    InsertRow(image,BImgBuff,(ssize_t) y,bpp,exception); \
     x=0; \
     y++; \
    } \
 }
 /* WPG2 raster reader. */
-static int UnpackWPG2Raster(Image *image,int bpp)
+static int UnpackWPG2Raster(Image *image,int bpp,ExceptionInfo *exception)
 {
   size_t
     x,
@@ -614,8 +612,8 @@ static int UnpackWPG2Raster(Image *image,int bpp)
             /* duplicate the previous row RunCount x */
             for(i=0;i<=RunCount;i++)
               {      
-                InsertRow(BImgBuff,(ssize_t) (image->rows >= y ? y : image->rows-1),
-                          image,bpp);
+                InsertRow(image,BImgBuff,(ssize_t) (image->rows >= y ? y : image->rows-1),
+                          bpp,exception);
                 y++;
               }    
           }
@@ -1128,7 +1126,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                     }
                 }      
 
-              if(UnpackWPGRaster(image,bpp) < 0)
+              if(UnpackWPGRaster(image,bpp,exception) < 0)
                 /* The raster cannot be unpacked */
                 {
                 DecompressionFailed:
@@ -1300,7 +1298,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                     for(i=0; i< (ssize_t) image->rows; i++)
                       {
                         (void) ReadBlob(image,ldblk,BImgBuff);
-                        InsertRow(BImgBuff,i,image,bpp);
+                        InsertRow(image,BImgBuff,i,bpp,exception);
                       }
 
                     if(BImgBuff)
@@ -1309,7 +1307,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                   }
                 case 1:    /*RLE for WPG2 */
                   {
-                    if( UnpackWPG2Raster(image,bpp) < 0)
+                    if( UnpackWPG2Raster(image,bpp,exception) < 0)
                       goto DecompressionFailed;
                     break;
                   }   
index 53d86b7896d29c694d8274da988e6158c4bfdda8..2109f8671d92bdbce0ddf0fc0f7dd4fbbd845475 100644 (file)
@@ -295,7 +295,8 @@ static inline size_t MagickMin(const size_t x,const size_t y)
   return(y);
 }
 
-static char *ReadBlobStringWithLongSize(Image *image,char *string,size_t max)
+static char *ReadBlobStringWithLongSize(Image *image,char *string,size_t max,
+  ExceptionInfo *exception)
 {
   int
     c;
@@ -325,7 +326,7 @@ static char *ReadBlobStringWithLongSize(Image *image,char *string,size_t max)
   string[i]='\0';
   offset=SeekBlob(image,(MagickOffsetType) (length-i),SEEK_CUR);
   if (offset < 0)
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
+    (void) ThrowMagickException(exception,GetMagickModule(),
       CorruptImageError,"ImproperImageHeader","`%s'",image->filename);
   return(string);
 }
@@ -436,7 +437,7 @@ static MagickBooleanType load_tile_rle(Image *image,Image *tile_image,
   xcfodata=xcfdata;
   count=ReadBlob(image, (size_t) data_length, xcfdata);
   xcfdatalimit = xcfodata+count-1;
-  exception=(&image->exception);
+  exception=(exception);
   for (i=0; i < (ssize_t) bytes_per_pixel; i++)
   {
     q=GetAuthenticPixels(tile_image,0,0,tile_image->columns,tile_image->rows,
@@ -779,10 +780,10 @@ static MagickBooleanType ReadOneLayer(Image* image,XCFDocInfo* inDocInfo,
   outLayer->height = ReadBlobMSBLong(image);
   outLayer->type = ReadBlobMSBLong(image);
   (void) ReadBlobStringWithLongSize(image, outLayer->name,
-    sizeof(outLayer->name));
+    sizeof(outLayer->name),exception);
   /* allocate the image for this layer */
   outLayer->image=CloneImage(image,outLayer->width, outLayer->height,MagickTrue,
-     &image->exception);
+     exception);
   if (outLayer->image == (Image *) NULL)
     return MagickFalse;
   /* read the layer properties! */
@@ -835,7 +836,7 @@ static MagickBooleanType ReadOneLayer(Image* image,XCFDocInfo* inDocInfo,
      case PROP_PARASITES:
      {
        if (DiscardBlobBytes(image,prop_size) == MagickFalse)
-         ThrowFileException(&image->exception,CorruptImageError,
+         ThrowFileException(exception,CorruptImageError,
            "UnexpectedEndOfFile",image->filename);
 
         /*
@@ -897,7 +898,7 @@ static MagickBooleanType ReadOneLayer(Image* image,XCFDocInfo* inDocInfo,
   /* read in the hierarchy */
   offset=SeekBlob(image, (MagickOffsetType) hierarchy_offset, SEEK_SET);
   if (offset < 0)
-    (void) ThrowMagickException(&image->exception,GetMagickModule(),
+    (void) ThrowMagickException(exception,GetMagickModule(),
       CorruptImageError,"InvalidImageHeader","`%s'",image->filename);
   if (load_hierarchy (image, inDocInfo, outLayer) == 0)
     return(MagickFalse);
@@ -1062,7 +1063,7 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
         */
         size_t num_colours = ReadBlobMSBLong(image);
         if (DiscardBlobBytes(image,3*num_colours) == MagickFalse)
-          ThrowFileException(&image->exception,CorruptImageError,
+          ThrowFileException(exception,CorruptImageError,
             "UnexpectedEndOfFile",image->filename);
     /*
       if (info->file_version == 0)
@@ -1110,7 +1111,7 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
       {
          /* just skip it - we don't care about guides */
         if (DiscardBlobBytes(image,prop_size) == MagickFalse)
-          ThrowFileException(&image->exception,CorruptImageError,
+          ThrowFileException(exception,CorruptImageError,
             "UnexpectedEndOfFile",image->filename);
       }
       break;
@@ -1150,7 +1151,7 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
       {
         /* BOGUS: we may need these for IPTC stuff */
         if (DiscardBlobBytes(image,prop_size) == MagickFalse)
-          ThrowFileException(&image->exception,CorruptImageError,
+          ThrowFileException(exception,CorruptImageError,
             "UnexpectedEndOfFile",image->filename);
         /*
       gssize_t         base = info->cp;
@@ -1179,8 +1180,8 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
       {
       /* BOGUS: just skip it for now */
         if (DiscardBlobBytes(image,prop_size) == MagickFalse)
-          ThrowFileException(&image->exception,CorruptImageError,
-            "UnexpectedEndOfFile",image->filename);
+          ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile",
+            image->filename);
 
         /*
       PathList *paths = xcf_load_bzpaths (gimage, info);
@@ -1197,7 +1198,7 @@ static Image *ReadXCFImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /* size_t digits =  */ (void) ReadBlobMSBLong(image);
         for (i=0; i<5; i++)
          (void) ReadBlobStringWithLongSize(image, unit_string,
-           sizeof(unit_string));
+           sizeof(unit_string),exception);
       }
      break;
 
index 65e6f689778d4c6716f8347f36752853115af989..8e8c9d55e383ae82d112f602c7b7f1f7f5ea95ec 100644 (file)
@@ -328,7 +328,7 @@ static Image *ReadXPSImage(const ImageInfo *image_info,ExceptionInfo *exception)
       Image
         *cmyk_image;
 
-      cmyk_image=ConsolidateCMYKImages(image,&image->exception);
+      cmyk_image=ConsolidateCMYKImages(image,exception);
       if (cmyk_image != (Image *) NULL)
         {
           image=DestroyImageList(image);
index b1be9aab68cd162c0e25bc88912ff35aafffa025..ab47d874d03dd5eea0b7d30377dc6dc0615c6c4b 100644 (file)
@@ -474,7 +474,7 @@ static Image *ReadXWDImage(const ImageInfo *image_info,ExceptionInfo *exception)
           for (x=0; x < (ssize_t) image->columns; x++)
           {
             index=ConstrainColormapIndex(image,XGetPixel(ximage,(int) x,
-              (int) y));
+              (int) y),exception);
             SetPixelIndex(image,index,q);
             SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
index 342f30730da650d0927ade27085c756364aaa296..2ed4d5af56b6ddee0b92ffc6b09a4c45cd1e3b63 100644 (file)
@@ -848,7 +848,6 @@ static Image *ReadYCBCRImage(const ImageInfo *image_info,
     scene++;
   } while (count == (ssize_t) length);
   quantum_info=DestroyQuantumInfo(quantum_info);
-  InheritException(&image->exception,&canvas_image->exception);
   canvas_image=DestroyImage(canvas_image);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
index ab67250d55ab3255a66018eb2af5d74553561393..bfbb7e7be9da6e1ae82af95199b1ef036e690c32 100644 (file)
@@ -399,7 +399,7 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception)
     {
       q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
       chroma_pixels=GetVirtualPixels(resize_image,0,y,resize_image->columns,1,
-        &resize_image->exception);
+        exception);
       if ((q == (Quantum *) NULL) ||
           (chroma_pixels == (const Quantum *) NULL))
         break;