GraphicsMagick: MSLStartElement(): Return immediately if there i...
GraphicsMagick Commits <[email protected]>
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.9476.1635875009.1346.graphicsmagick-commit@lists.sourceforge.net> |
changeset 2067faf19869 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=2067faf19869 summary: MSLStartElement(): Return immediately if there is already an error or the image is NULL. Do not discard exceptions when calling functions which return a new image. diffstat: ChangeLog | 8 ++ VisualMagick/installer/inc/version.isx | 4 +- coders/msl.c | 102 +++++++++++++++++++------------- magick/version.h | 4 +- www/Changelog.html | 7 ++ 5 files changed, 80 insertions(+), 45 deletions(-) diffs (457 lines): diff -r 9e045696119e -r 2067faf19869 ChangeLog --- a/ChangeLog Sun Oct 31 11:50:34 2021 -0500 +++ b/ChangeLog Tue Nov 02 12:39:01 2021 -0500 @@ -1,3 +1,11 @@ +2021-11-02 Bob Friesenhahn <[email protected]> + + * coders/msl.c (MSLStartElement): Return immediately if there is + already an error or the image is NULL. Do not discard exceptions + when calling functions which return a new image. Try even harder + to shut down the libxml2 parser. Fixes SourceForge issue 652 "SEGV + in gm at coders/msl.c:883". + 2021-10-31 Bob Friesenhahn <[email protected]> * magick/widget.c (MagickXPreferencesWidget): Eliminate diff -r 9e045696119e -r 2067faf19869 VisualMagick/installer/inc/version.isx --- a/VisualMagick/installer/inc/version.isx Sun Oct 31 11:50:34 2021 -0500 +++ b/VisualMagick/installer/inc/version.isx Tue Nov 02 12:39:01 2021 -0500 @@ -10,5 +10,5 @@ #define public MagickPackageName "GraphicsMagick" #define public MagickPackageVersion "1.4" -#define public MagickPackageVersionAddendum ".020211031" -#define public MagickPackageReleaseDate "snapshot-20211031" +#define public MagickPackageVersionAddendum ".020211102" +#define public MagickPackageReleaseDate "snapshot-20211102" diff -r 9e045696119e -r 2067faf19869 coders/msl.c --- a/coders/msl.c Sun Oct 31 11:50:34 2021 -0500 +++ b/coders/msl.c Tue Nov 02 12:39:01 2021 -0500 @@ -448,7 +448,7 @@ Receive the document locator at startup, actually xmlDefaultSAXLocator. */ (void) LogMagickEvent(CoderEvent,GetMagickModule(), - " SAX.setDocumentLocator()\n"); + " SAX.setDocumentLocator()"); /* msl_info=(MSLInfo *) context; */ } @@ -644,8 +644,17 @@ */ (void) LogMagickEvent(CoderEvent,GetMagickModule(), " SAX.startElement(%.1024s",name); + msl_info=(MSLInfo *) context; + /* + If we already have an exception at error level, then just return. + Eventually the XML reader will stop. + */ + if (msl_info->exception->severity >= ErrorException) + { + (void) LogMagickEvent(CoderEvent,GetMagickModule()," )"); + return; + } GetExceptionInfo(&exception); - msl_info=(MSLInfo *) context; n=msl_info->n; keyword=(const char *) NULL; switch (*name) @@ -718,7 +727,7 @@ *newImage; newImage=BlurImage(msl_info->image[n],radius,sigma, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -757,7 +766,7 @@ (void) QueryColorDatabase (value, &msl_info->image[n]->border_color, - &exception); + msl_info->exception); break; } ThrowException(msl_info->exception,OptionError, @@ -827,7 +836,7 @@ rectInfo.y = y; border_image=BorderImage(msl_info->image[n],&rectInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (border_image == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -908,7 +917,7 @@ *newImage; newImage=CharcoalImage(msl_info->image[n],radius,sigma, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1025,7 +1034,7 @@ rectInfo.y = y; newImage=ChopImage(msl_info->image[n],&rectInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1351,7 +1360,7 @@ rectInfo.y = y; newImage=CropImage(msl_info->image[n],&rectInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1379,7 +1388,7 @@ *newImage; newImage=DespeckleImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1446,7 +1455,7 @@ *newImage; newImage=EdgeImage(msl_info->image[n],radius, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1519,7 +1528,7 @@ *newImage; newImage=EmbossImage(msl_info->image[n],radius,sigma, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1539,7 +1548,7 @@ *newImage; newImage=EnhanceImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1585,7 +1594,7 @@ *newImage; newImage=FlattenImages(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1605,7 +1614,7 @@ *newImage; newImage=FlipImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1625,7 +1634,7 @@ *newImage; newImage=FlopImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1664,7 +1673,7 @@ (void) QueryColorDatabase (value, &msl_info->image[n]->matte_color, - &exception); + msl_info->exception); break; } ThrowException(msl_info->exception,OptionError, @@ -1786,7 +1795,7 @@ frameInfo.inner_bevel = y; newImage=FrameImage(msl_info->image[n],&frameInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -1989,7 +1998,7 @@ (void) QueryColorDatabase (value, &msl_info->image_info[n]->background_color, - &exception); + msl_info->exception); break; } ThrowException(msl_info->exception,OptionError, @@ -2130,7 +2139,7 @@ *newImage; newImage=ImplodeImage(msl_info->image[n],amount, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2157,7 +2166,7 @@ *newImage; newImage=MagnifyImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2217,7 +2226,7 @@ *newImage; newImage=MedianFilterImage(msl_info->image[n], radius, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2238,7 +2247,7 @@ *newImage; newImage=MinifyImage(msl_info->image[n], - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2333,7 +2342,7 @@ *newImage; newImage=OilPaintImage(msl_info->image[n], radius, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2635,7 +2644,7 @@ *newImage; newImage=ReduceNoiseImage(msl_info->image[n], radius, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2753,7 +2762,7 @@ (height == msl_info->image[n]->rows)) break; resize_image=ZoomImage(msl_info->image[n],width,height, - &msl_info->image[n]->exception); + msl_info->exception); if (resize_image == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2840,7 +2849,7 @@ *newImage; newImage=RollImage(msl_info->image[n], x, y, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2901,7 +2910,7 @@ *newImage; newImage=RotateImage(msl_info->image[n], degrees, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -2995,7 +3004,7 @@ *newImage; newImage=SampleImage(msl_info->image[n], width, height, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3082,7 +3091,7 @@ *newImage; newImage=ScaleImage(msl_info->image[n], width, height, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3118,7 +3127,7 @@ (void) QueryColorDatabase (value, &msl_info->image_info[n]->background_color, - &exception); + msl_info->exception); break; } else if (LocaleCompare(keyword,"bordercolor") == 0) @@ -3126,7 +3135,7 @@ (void) QueryColorDatabase (value, &msl_info->image_info[n]->border_color, - &exception); + msl_info->exception); break; } ThrowException(msl_info->exception,OptionError, @@ -3215,7 +3224,7 @@ (void) QueryColorDatabase (value, &msl_info->image_info[n]->matte_color, - &exception); + msl_info->exception); break; } ThrowException(msl_info->exception,OptionError, @@ -3318,7 +3327,7 @@ *newImage; newImage=SharpenImage(msl_info->image[n],radius,sigma, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3411,7 +3420,7 @@ newImage=ShaveImage(msl_info->image[n], &rectInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3486,7 +3495,7 @@ *newImage; newImage=ShearImage(msl_info->image[n], x, y, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3599,7 +3608,7 @@ *newImage; newImage=SpreadImage(msl_info->image[n], radius, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3671,7 +3680,7 @@ *newImage; newImage=SteganoImage(msl_info->image[n], watermark, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3745,7 +3754,7 @@ *newImage; newImage=StereoImage(msl_info->image[n], stereoImage, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -3807,7 +3816,7 @@ *newImage; newImage=SwirlImage(msl_info->image[n], degrees, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -4006,7 +4015,7 @@ (msl_info->image[n], &target,0,0, &(msl_info->image[n])->exception); - (void) QueryColorDatabase(value,&target,&exception); + (void) QueryColorDatabase(value,&target,msl_info->exception); (void) TransparentImage(msl_info->image[n],target, TransparentOpacity); break; @@ -4044,7 +4053,7 @@ rectInfo.x = rectInfo.y = 0; newImage=CropImage(msl_info->image[n],&rectInfo, - &msl_info->image[n]->exception); + msl_info->exception); if (newImage == (Image *) NULL) break; DestroyImage(msl_info->image[n]); @@ -4117,6 +4126,17 @@ } if ( value != NULL ) MagickFreeMemory(value); + /* + If image-specific exception has an exception more severe than MSL + global exception, then copy to MSL global exception. + */ + if ((msl_info->image[n] != (Image *) NULL) && + (msl_info->image[n]->exception.severity > msl_info->exception->severity)) + { + CopyException(msl_info->exception,&msl_info->image[n]->exception); + } + if (msl_info->exception->severity >= ErrorException) + xmlStopParser(msl_info->parser); (void) LogMagickEvent(CoderEvent,GetMagickModule()," )"); } diff -r 9e045696119e -r 2067faf19869 magick/version.h --- a/magick/version.h Sun Oct 31 11:50:34 2021 -0500 +++ b/magick/version.h Tue Nov 02 12:39:01 2021 -0500 @@ -38,8 +38,8 @@ #define MagickLibVersion 0x252200 #define MagickLibVersionText "1.4" #define MagickLibVersionNumber 25,22,0 -#define MagickChangeDate "20211031" -#define MagickReleaseDate "snapshot-20211031" +#define MagickChangeDate "20211102" +#define MagickReleaseDate "snapshot-20211102" /* The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines diff -r 9e045696119e -r 2067faf19869 www/Changelog.html --- a/www/Changelog.html Sun Oct 31 11:50:34 2021 -0500 +++ b/www/Changelog.html Tue Nov 02 12:39:01 2021 -0500 @@ -35,6 +35,13 @@ <div class="document"> +<p>2021-11-02 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> +<blockquote> +* coders/msl.c (MSLStartElement): Return immediately if there is +already an error or the image is NULL. Do not discard exceptions +when calling functions which return a new image. Try even harder +to shut down the libxml2 parser. Fixes SourceForge issue 652 "SEGV +in gm at coders/msl.c:883".</blockquote> <p>2021-10-31 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> <blockquote> * magick/widget.c (MagickXPreferencesWidget): Eliminate