From 3755d2289b032919c065f6ab11ef570063f7f828 Mon Sep 17 00:00:00 2001 From: Cristy Date: Tue, 26 Dec 2017 10:59:58 -0500 Subject: [PATCH] https://github.com/ImageMagick/ImageMagick/issues/920 --- MagickWand/conjure.c | 2 +- coders/msl.c | 32 +++++++++++++++++--------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/MagickWand/conjure.c b/MagickWand/conjure.c index 954770acb..e71ca53c4 100644 --- a/MagickWand/conjure.c +++ b/MagickWand/conjure.c @@ -289,7 +289,7 @@ WandExport MagickBooleanType ConjureImageCommand(ImageInfo *image_info, status=SetImageOption(image_info,"filename",argv[i]); if (status == MagickFalse) ThrowConjureException(ImageError,"UnableToPersistKey",argv[i]); - (void) FormatLocaleString(filename,MagickPathExtent,"msl:%s",argv[i]); + (void) FormatLocaleString(filename,MagickPathExtent,"%s",argv[i]); image=ReadImages(image_info,filename,exception); CatchException(exception); if (image != (Image *) NULL) diff --git a/coders/msl.c b/coders/msl.c index 4eeb924c9..7c2be5431 100644 --- a/coders/msl.c +++ b/coders/msl.c @@ -594,6 +594,8 @@ static void MSLPopImage(MSLInfo *msl_info) msl_info->image[msl_info->n]=DestroyImage(msl_info->image[msl_info->n]); msl_info->attributes[msl_info->n]=DestroyImage( msl_info->attributes[msl_info->n]); + msl_info->draw_info[msl_info->n]=DestroyDrawInfo( + msl_info->draw_info[msl_info->n]); msl_info->image_info[msl_info->n]=DestroyImageInfo( msl_info->image_info[msl_info->n]); msl_info->n--; @@ -7904,18 +7906,24 @@ static MagickBooleanType ProcessMSLScript(const ImageInfo *image_info, */ xmlFreeParserCtxt(msl_info.parser); (void) LogMagickEvent(CoderEvent,GetMagickModule(),"end SAX"); - msl_info.group_info=(MSLGroupInfo *) RelinquishMagickMemory( - msl_info.group_info); if (*image == (Image *) NULL) - *image=(*msl_info.image); - *msl_info.image_info=DestroyImageInfo(*msl_info.image_info); - msl_info.image_info=(ImageInfo **) RelinquishMagickMemory( - msl_info.image_info); - *msl_info.draw_info=DestroyDrawInfo(*msl_info.draw_info); + *image=CloneImage(*msl_info.image,0,0,MagickTrue,exception); + while (msl_info.n >= 0) + { + msl_info.image[msl_info.n]=DestroyImage(msl_info.image[msl_info.n]); + msl_info.attributes[msl_info.n]=DestroyImage( + msl_info.attributes[msl_info.n]); + msl_info.draw_info[msl_info.n]=DestroyDrawInfo( + msl_info.draw_info[msl_info.n]); + msl_info.image_info[msl_info.n]=DestroyImageInfo( + msl_info.image_info[msl_info.n]); + msl_info.n--; + } msl_info.draw_info=(DrawInfo **) RelinquishMagickMemory(msl_info.draw_info); msl_info.image=(Image **) RelinquishMagickMemory(msl_info.image); - *msl_info.attributes=DestroyImage(*msl_info.attributes); msl_info.attributes=(Image **) RelinquishMagickMemory(msl_info.attributes); + msl_info.image_info=(ImageInfo **) RelinquishMagickMemory( + msl_info.image_info); msl_info.group_info=(MSLGroupInfo *) RelinquishMagickMemory( msl_info.group_info); if (msl_info.exception->severity != UndefinedException) @@ -8334,9 +8342,6 @@ static MagickBooleanType WriteMSLImage(const ImageInfo *image_info,Image *image, Image *msl_image; - MagickBooleanType - status; - assert(image_info != (const ImageInfo *) NULL); assert(image_info->signature == MagickCoreSignature); assert(image != (Image *) NULL); @@ -8344,9 +8349,6 @@ static MagickBooleanType WriteMSLImage(const ImageInfo *image_info,Image *image, if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); msl_image=CloneImage(image,0,0,MagickTrue,exception); - status=ProcessMSLScript(image_info,&msl_image,exception); - if (msl_image != (Image *) NULL) - msl_image=DestroyImage(msl_image); - return(status); + return(ProcessMSLScript(image_info,&msl_image,exception)); } #endif -- 2.40.0