• R/O
  • SSH

GM: Commit

Main GraphicsMagick source repository


Commit MetaInfo

Revisãodc28ec43d4838d209ecf06bb1bde099820b0efec (tree)
Hora2021-07-18 23:58:45
AutorBob Friesenhahn <bfriesen@Grap...>
CommiterBob Friesenhahn

Mensagem de Log

MSL: Add more input image validations and use macros to reduce repeated code.

Mudança Sumário

Diff

diff -r 6a386072d064 -r dc28ec43d483 ChangeLog
--- a/ChangeLog Sat Jul 17 08:24:57 2021 -0500
+++ b/ChangeLog Sun Jul 18 09:58:45 2021 -0500
@@ -1,3 +1,14 @@
1+2021-07-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
2+
3+ * coders/msl.c (MSLStartElement): Use macros to simplify
4+ validations and reduce repeated code fragments. Add validations
5+ for image size and pixels present where applicable. Fixes
6+ oss-fuzz 36224 "graphicsmagick:coder_MSL_fuzzer: Timeout in
7+ coder_MSL_fuzzer".
8+
9+ * magick/transform.c (RollImage): Assert that image rows and
10+ columns are not zero.
11+
112 2021-07-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
213
314 * coders/jp2.c (initialize_jasper): Update for the latest version
diff -r 6a386072d064 -r dc28ec43d483 VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx Sat Jul 17 08:24:57 2021 -0500
+++ b/VisualMagick/installer/inc/version.isx Sun Jul 18 09:58:45 2021 -0500
@@ -10,5 +10,5 @@
1010
1111 #define public MagickPackageName "GraphicsMagick"
1212 #define public MagickPackageVersion "1.4"
13-#define public MagickPackageVersionAddendum ".020210716"
14-#define public MagickPackageReleaseDate "snapshot-20210716"
13+#define public MagickPackageVersionAddendum ".020210718"
14+#define public MagickPackageReleaseDate "snapshot-20210718"
diff -r 6a386072d064 -r dc28ec43d483 coders/msl.c
--- a/coders/msl.c Sat Jul 17 08:24:57 2021 -0500
+++ b/coders/msl.c Sun Jul 18 09:58:45 2021 -0500
@@ -580,6 +580,36 @@
580580 }
581581 }
582582
583+#define MSL_BREAK_IF_IMAGE_NULL(_image) \
584+ if (_image == (Image *) NULL) \
585+ { \
586+ ThrowException(msl_info->exception,OptionError, \
587+ NoImagesDefined,(char *) name); \
588+ break; \
589+ }
590+
591+#define MSL_BREAK_IF_IMAGE_ZERO_SIZE(_image) \
592+ if ((_image->rows) == 0 || \
593+ (_image->columns == 0)) \
594+ { \
595+ ThrowException(msl_info->exception,OptionError, \
596+ NonzeroWidthAndHeightRequired,(char *) name); \
597+ break; \
598+ }
599+
600+#define MSL_BREAK_IF_IMAGE_PIXEL_CACHE_NOT_PRESENT(_image) \
601+ if (!GetPixelCachePresent(_image)) \
602+ { \
603+ ThrowException(msl_info->exception,OptionError, \
604+ NoImagesDefined,(char *) name); \
605+ break; \
606+ }
607+
608+#define MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(_image) \
609+ MSL_BREAK_IF_IMAGE_NULL(_image); \
610+ MSL_BREAK_IF_IMAGE_ZERO_SIZE(_image); \
611+ MSL_BREAK_IF_IMAGE_PIXEL_CACHE_NOT_PRESENT(_image)
612+
583613 static void
584614 MSLStartElement(void *context,const xmlChar *name,
585615 const xmlChar **attributes)
@@ -628,23 +658,14 @@
628658 double radius = 0.0,
629659 sigma = 1.0;
630660
631- if (msl_info->image[n] == (Image *) NULL)
632- {
633- ThrowException(msl_info->exception,OptionError,NoImagesDefined,
634- (char *) name);
635- break;
636- }
661+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
662+
637663 if (attributes != (const xmlChar **) NULL)
638664 {
639665 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
640666 {
641667 keyword=(const char *) attributes[i++];
642- if (msl_info->attributes[n] == (Image *) NULL)
643- {
644- ThrowException(msl_info->exception,OptionError,
645- NoImagesDefined,(char *) keyword);
646- break;
647- }
668+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
648669 value=TranslateText(msl_info->image_info[n],
649670 msl_info->attributes[n],
650671 (char *) attributes[i]);
@@ -711,23 +732,14 @@
711732 width = height = 6; /* this is the value that Magick++ uses */
712733 x = y = 0;
713734
714- if (msl_info->image[n] == (Image *) NULL)
715- {
716- ThrowException(msl_info->exception,OptionError,NoImagesDefined,
717- (char *) name);
718- break;
719- }
735+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
736+
720737 if (attributes != (const xmlChar **) NULL)
721738 {
722739 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
723740 {
724741 keyword=(const char *) attributes[i++];
725- if (msl_info->attributes[n] == (Image *) NULL)
726- {
727- ThrowException(msl_info->exception,OptionError,
728- NoImagesDefined,(char *) keyword);
729- break;
730- }
742+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
731743 value=TranslateText(msl_info->image_info[n],
732744 msl_info->attributes[n],
733745 (char *) attributes[i]);
@@ -836,23 +848,14 @@
836848 double radius = 0.0,
837849 sigma = 1.0;
838850
839- if (msl_info->image[n] == (Image *) NULL)
840- {
841- ThrowException(msl_info->exception,OptionError,
842- NoImagesDefined,(char *) name);
843- break;
844- }
851+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
852+
845853 if (attributes != (const xmlChar **) NULL)
846854 {
847855 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
848856 {
849857 keyword=(const char *) attributes[i++];
850- if (msl_info->attributes[n] == (Image *) NULL)
851- {
852- ThrowException(msl_info->exception,OptionError,
853- NoImagesDefined,(char *) keyword);
854- break;
855- }
858+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
856859 value=TranslateText(msl_info->image_info[n],
857860 msl_info->attributes[n],
858861 (char *) attributes[i]);
@@ -920,23 +923,14 @@
920923 height=msl_info->image[n]->rows;
921924 x = y = 0;
922925
923- if (msl_info->image[n] == (Image *) NULL)
924- {
925- ThrowException(msl_info->exception,OptionError,
926- NoImagesDefined,(char *) name);
927- break;
928- }
926+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
927+
929928 if (attributes == (const xmlChar **) NULL)
930929 break;
931930 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
932931 {
933932 keyword=(const char *) attributes[i++];
934- if (msl_info->attributes[n] == (Image *) NULL)
935- {
936- ThrowException(msl_info->exception,OptionError,
937- NoImagesDefined,(char *) keyword);
938- break;
939- }
933+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
940934 value=TranslateText(msl_info->image_info[n],
941935 msl_info->attributes[n],
942936 (char *) attributes[i]);
@@ -1051,23 +1045,14 @@
10511045
10521046 x = y = 0;
10531047
1054- if (msl_info->image[n] == (Image *) NULL)
1055- {
1056- ThrowException(msl_info->exception,OptionError,
1057- NoImagesDefined,(char *) name);
1058- break;
1059- }
1048+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1049+
10601050 if (attributes == (const xmlChar **) NULL)
10611051 break;
10621052 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
10631053 {
10641054 keyword=(const char *) attributes[i++];
1065- if (msl_info->attributes[n] == (Image *) NULL)
1066- {
1067- ThrowException(msl_info->exception,OptionError,
1068- NoImagesDefined,(char *) keyword);
1069- break;
1070- }
1055+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
10711056 value=TranslateText(msl_info->image_info[n],
10721057 msl_info->attributes[n],
10731058 (char *) attributes[i]);
@@ -1259,28 +1244,19 @@
12591244 }
12601245 else if (LocaleCompare((char *) name,"crop") == 0)
12611246 {
1247+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1248+
12621249 /* init the values */
12631250 width=msl_info->image[n]->columns;
12641251 height=msl_info->image[n]->rows;
12651252 x = y = 0;
12661253
1267- if (msl_info->image[n] == (Image *) NULL)
1268- {
1269- ThrowException(msl_info->exception,OptionError,
1270- NoImagesDefined,(char *) name);
1271- break;
1272- }
12731254 if (attributes == (const xmlChar **) NULL)
12741255 break;
12751256 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
12761257 {
12771258 keyword=(const char *) attributes[i++];
1278- if (msl_info->attributes[n] == (Image *) NULL)
1279- {
1280- ThrowException(msl_info->exception,OptionError,
1281- NoImagesDefined,(char *) keyword);
1282- break;
1283- }
1259+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
12841260 value=TranslateText(msl_info->image_info[n],
12851261 msl_info->attributes[n],
12861262 (char *) attributes[i]);
@@ -1393,12 +1369,7 @@
13931369 {
13941370 if (LocaleCompare((char *) name, "despeckle") == 0)
13951371 {
1396- if (msl_info->image[n] == (Image *) NULL)
1397- {
1398- ThrowException(msl_info->exception,OptionError,
1399- NoImagesDefined,(char *) name);
1400- break;
1401- }
1372+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
14021373
14031374 /* no attributes here */
14041375
@@ -1427,23 +1398,14 @@
14271398 {
14281399 double radius = 0.0;
14291400
1430- if (msl_info->image[n] == (Image *) NULL)
1431- {
1432- ThrowException(msl_info->exception,OptionError,
1433- NoImagesDefined,(char *) name);
1434- break;
1435- }
1401+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1402+
14361403 if (attributes != (const xmlChar **) NULL)
14371404 {
14381405 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
14391406 {
14401407 keyword=(const char *) attributes[i++];
1441- if (msl_info->attributes[n] == (Image *) NULL)
1442- {
1443- ThrowException(msl_info->exception,OptionError,
1444- NoImagesDefined,(char *) keyword);
1445- break;
1446- }
1408+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
14471409 value=TranslateText(msl_info->image_info[n],
14481410 msl_info->attributes[n],
14491411 (char *) attributes[i]);
@@ -1497,23 +1459,14 @@
14971459 double radius = 0.0,
14981460 sigma = 1.0;
14991461
1500- if (msl_info->image[n] == (Image *) NULL)
1501- {
1502- ThrowException(msl_info->exception,OptionError,
1503- NoImagesDefined,(char *) name);
1504- break;
1505- }
1462+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1463+
15061464 if (attributes != (const xmlChar **) NULL)
15071465 {
15081466 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
15091467 {
15101468 keyword=(const char *) attributes[i++];
1511- if (msl_info->attributes[n] == (Image *) NULL)
1512- {
1513- ThrowException(msl_info->exception,OptionError,
1514- NoImagesDefined,(char *) keyword);
1515- break;
1516- }
1469+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
15171470 value=TranslateText(msl_info->image_info[n],
15181471 msl_info->attributes[n],
15191472 (char *) attributes[i]);
@@ -1576,12 +1529,7 @@
15761529 }
15771530 else if (LocaleCompare((char *) name, "enhance") == 0)
15781531 {
1579- if (msl_info->image[n] == (Image *) NULL)
1580- {
1581- ThrowException(msl_info->exception,OptionError,
1582- NoImagesDefined,(char *) name);
1583- break;
1584- }
1532+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
15851533
15861534 /* no attributes here */
15871535
@@ -1627,12 +1575,7 @@
16271575 {
16281576 if (LocaleCompare((char *) name, "flatten") == 0)
16291577 {
1630- if (msl_info->image[n] == (Image *) NULL)
1631- {
1632- ThrowException(msl_info->exception,OptionError,
1633- NoImagesDefined,(char *) name);
1634- break;
1635- }
1578+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
16361579
16371580 /* no attributes here */
16381581
@@ -1652,12 +1595,7 @@
16521595 }
16531596 else if (LocaleCompare((char *) name, "flip") == 0)
16541597 {
1655- if (msl_info->image[n] == (Image *) NULL)
1656- {
1657- ThrowException(msl_info->exception,OptionError,
1658- NoImagesDefined,(char *) name);
1659- break;
1660- }
1598+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
16611599
16621600 /* no attributes here */
16631601
@@ -1677,12 +1615,7 @@
16771615 }
16781616 else if (LocaleCompare((char *) name, "flop") == 0)
16791617 {
1680- if (msl_info->image[n] == (Image *) NULL)
1681- {
1682- ThrowException(msl_info->exception,OptionError,
1683- NoImagesDefined,(char *) name);
1684- break;
1685- }
1618+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
16861619
16871620 /* no attributes here */
16881621
@@ -1702,27 +1635,18 @@
17021635 }
17031636 else if (LocaleCompare((char *) name,"frame") == 0)
17041637 {
1638+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1639+
17051640 /* init the values */
17061641 width = height = 25; /* these are the values that Magick++ uses */
17071642 x = y = 6;
17081643
1709- if (msl_info->image[n] == (Image *) NULL)
1710- {
1711- ThrowException(msl_info->exception,OptionError,
1712- NoImagesDefined,(char *) name);
1713- break;
1714- }
17151644 if (attributes != (const xmlChar **) NULL)
17161645 {
17171646 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
17181647 {
17191648 keyword=(const char *) attributes[i++];
1720- if (msl_info->attributes[n] == (Image *) NULL)
1721- {
1722- ThrowException(msl_info->exception,OptionError,
1723- NoImagesDefined,(char *) keyword);
1724- break;
1725- }
1649+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
17261650 value=TranslateText(msl_info->image_info[n],
17271651 msl_info->attributes[n],
17281652 (char *) attributes[i]);
@@ -1883,12 +1807,8 @@
18831807 double
18841808 gammaRed = 0, gammaGreen = 0, gammaBlue = 0;
18851809
1886- if (msl_info->image[n] == (Image *) NULL)
1887- {
1888- ThrowException(msl_info->exception,OptionError,
1889- NoImagesDefined,(char *) name);
1890- break;
1891- }
1810+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
1811+
18921812 if (attributes == (const xmlChar **) NULL)
18931813 break;
18941814 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
@@ -1956,12 +1876,9 @@
19561876 }
19571877 else if (LocaleCompare((char *) name,"get") == 0)
19581878 {
1959- if (msl_info->image[n] == (Image *) NULL)
1960- {
1961- ThrowException(msl_info->exception,OptionError,
1962- NoImagesDefined,(char *) name);
1963- break;
1964- }
1879+
1880+ MSL_BREAK_IF_IMAGE_NULL(msl_info->image[n]);
1881+
19651882 if (attributes == (const xmlChar **) NULL)
19661883 break;
19671884 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
@@ -2054,12 +1971,7 @@
20541971 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
20551972 {
20561973 keyword=(const char *) attributes[i++];
2057- if (msl_info->attributes[n] == (Image *) NULL)
2058- {
2059- ThrowException(msl_info->exception,OptionError,
2060- NoImagesDefined,(char *) keyword);
2061- break;
2062- }
1974+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
20631975 value=TranslateText(msl_info->image_info[n],
20641976 msl_info->attributes[n],
20651977 (char *) attributes[i]);
@@ -2171,23 +2083,14 @@
21712083 /* init the values */
21722084 double amount = 0;
21732085
2174- if (msl_info->image[n] == (Image *) NULL)
2175- {
2176- ThrowException(msl_info->exception,OptionError,
2177- NoImagesDefined,(char *) name);
2178- break;
2179- }
2086+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2087+
21802088 if (attributes == (const xmlChar **) NULL)
21812089 break;
21822090 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
21832091 {
21842092 keyword=(const char *) attributes[i++];
2185- if (msl_info->attributes[n] == (Image *) NULL)
2186- {
2187- ThrowException(msl_info->exception,OptionError,
2188- NoImagesDefined,(char *) keyword);
2189- break;
2190- }
2093+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
21912094 value=TranslateText(msl_info->image_info[n],
21922095 msl_info->attributes[n],
21932096 (char *) attributes[i]);
@@ -2244,12 +2147,7 @@
22442147 {
22452148 if (LocaleCompare((char *) name, "magnify") == 0)
22462149 {
2247- if (msl_info->image[n] == (Image *) NULL)
2248- {
2249- ThrowException(msl_info->exception,OptionError,
2250- NoImagesDefined,(char *) name);
2251- break;
2252- }
2150+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
22532151
22542152 /* no attributes here */
22552153
@@ -2272,23 +2170,14 @@
22722170 /* init the values */
22732171 unsigned int radius = 0;
22742172
2275- if (msl_info->image[n] == (Image *) NULL)
2276- {
2277- ThrowException(msl_info->exception,OptionError,
2278- NoImagesDefined,(char *) name);
2279- break;
2280- }
2173+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2174+
22812175 if (attributes == (const xmlChar **) NULL)
22822176 break;
22832177 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
22842178 {
22852179 keyword=(const char *) attributes[i++];
2286- if (msl_info->attributes[n] == (Image *) NULL)
2287- {
2288- ThrowException(msl_info->exception,OptionError,
2289- NoImagesDefined,(char *) keyword);
2290- break;
2291- }
2180+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
22922181 value=TranslateText(msl_info->image_info[n],
22932182 msl_info->attributes[n],
22942183 (char *) attributes[i]);
@@ -2338,12 +2227,8 @@
23382227 }
23392228 else if (LocaleCompare((char *) name, "minify") == 0)
23402229 {
2341- if (msl_info->image[n] == (Image *) NULL)
2342- {
2343- ThrowException(msl_info->exception,OptionError,
2344- NoImagesDefined,(char *) name);
2345- break;
2346- }
2230+
2231+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
23472232
23482233 /* no attributes here */
23492234
@@ -2379,12 +2264,7 @@
23792264 {
23802265 if (LocaleCompare((char *) name, "normalize") == 0)
23812266 {
2382- if (msl_info->image[n] == (Image *) NULL)
2383- {
2384- ThrowException(msl_info->exception,OptionError,
2385- NoImagesDefined,(char *) name);
2386- break;
2387- }
2267+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
23882268
23892269 /* no attributes here */
23902270
@@ -2406,23 +2286,14 @@
24062286 /* init the values */
24072287 unsigned int radius = 3;
24082288
2409- if (msl_info->image[n] == (Image *) NULL)
2410- {
2411- ThrowException(msl_info->exception,OptionError,
2412- NoImagesDefined,(char *) name);
2413- break;
2414- }
2289+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2290+
24152291 if (attributes == (const xmlChar **) NULL)
24162292 break;
24172293 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
24182294 {
24192295 keyword=(const char *) attributes[i++];
2420- if (msl_info->attributes[n] == (Image *) NULL)
2421- {
2422- ThrowException(msl_info->exception,OptionError,
2423- NoImagesDefined,(char *) keyword);
2424- break;
2425- }
2296+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
24262297 value=TranslateText(msl_info->image_info[n],
24272298 msl_info->attributes[n],
24282299 (char *) attributes[i]);
@@ -2486,12 +2357,7 @@
24862357 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
24872358 {
24882359 keyword=(const char *) attributes[i++];
2489- if (msl_info->attributes[n] == (Image *) NULL)
2490- {
2491- ThrowException(msl_info->exception,OptionError,
2492- NoImagesDefined,(char *) keyword);
2493- break;
2494- }
2360+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
24952361 value=TranslateText(msl_info->image_info[n],
24962362 msl_info->attributes[n],
24972363 (char *) attributes[i]);
@@ -2530,24 +2396,15 @@
25302396 ImageInfo
25312397 *clone_info;
25322398
2533- if (msl_info->image[n] == (Image *) NULL)
2534- {
2535- ThrowException(msl_info->exception,OptionError,
2536- NoImagesDefined,(char *) name);
2537- break;
2538- }
2399+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2400+
25392401 if (attributes == (const xmlChar **) NULL)
25402402 break;
25412403 clone_info=CloneImageInfo(msl_info->image_info[n]);
25422404 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
25432405 {
25442406 keyword=(const char *) attributes[i++];
2545- if (msl_info->attributes[n] == (Image *) NULL)
2546- {
2547- ThrowException(msl_info->exception,OptionError,
2548- NoImagesDefined,(char *) keyword);
2549- break;
2550- }
2407+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
25512408 value=TranslateText(msl_info->image_info[n],
25522409 msl_info->attributes[n],
25532410 (char *) attributes[i]);
@@ -2655,12 +2512,7 @@
26552512 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
26562513 {
26572514 keyword=(const char *) attributes[i++];
2658- if (msl_info->attributes[n] == (Image *) NULL)
2659- {
2660- ThrowException(msl_info->exception,OptionError,
2661- NoImagesDefined,(char *) keyword);
2662- break;
2663- }
2515+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
26642516 value=TranslateText(msl_info->image_info[n],
26652517 msl_info->attributes[n],
26662518 (char *) attributes[i]);
@@ -2736,23 +2588,14 @@
27362588 /* init the values */
27372589 unsigned int radius = 0;
27382590
2739- if (msl_info->image[n] == (Image *) NULL)
2740- {
2741- ThrowException(msl_info->exception,OptionError,
2742- NoImagesDefined,(char *) name);
2743- break;
2744- }
2591+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2592+
27452593 if (attributes == (const xmlChar **) NULL)
27462594 break;
27472595 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
27482596 {
27492597 keyword=(const char *) attributes[i++];
2750- if (msl_info->attributes[n] == (Image *) NULL)
2751- {
2752- ThrowException(msl_info->exception,OptionError,
2753- NoImagesDefined,(char *) keyword);
2754- break;
2755- }
2598+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
27562599 value=TranslateText(msl_info->image_info[n],
27572600 msl_info->attributes[n],
27582601 (char *) attributes[i]);
@@ -2802,12 +2645,7 @@
28022645 }
28032646 else if (LocaleCompare((char *) name,"resize") == 0)
28042647 {
2805- if (msl_info->image[n] == (Image *) NULL)
2806- {
2807- ThrowException(msl_info->exception,OptionError,
2808- NoImagesDefined,(char *) name);
2809- break;
2810- }
2648+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
28112649
28122650 /* init the values */
28132651 width=msl_info->image[n]->columns;
@@ -2820,12 +2658,7 @@
28202658 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
28212659 {
28222660 keyword=(const char *) attributes[i++];
2823- if (msl_info->attributes[n] == (Image *) NULL)
2824- {
2825- ThrowException(msl_info->exception,OptionError,
2826- NoImagesDefined,(char *) keyword);
2827- break;
2828- }
2661+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
28292662 value=TranslateText(msl_info->image_info[n],
28302663 msl_info->attributes[n],
28312664 (char *) attributes[i]);
@@ -2936,23 +2769,14 @@
29362769 height=msl_info->image[n]->rows;
29372770 x = y = 0;
29382771
2939- if (msl_info->image[n] == (Image *) NULL)
2940- {
2941- ThrowException(msl_info->exception,OptionError,
2942- NoImagesDefined,(char *) name);
2943- break;
2944- }
2772+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2773+
29452774 if (attributes == (const xmlChar **) NULL)
29462775 break;
29472776 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
29482777 {
29492778 keyword=(const char *) attributes[i++];
2950- if (msl_info->attributes[n] == (Image *) NULL)
2951- {
2952- ThrowException(msl_info->exception,OptionError,
2953- NoImagesDefined,(char *) keyword);
2954- break;
2955- }
2779+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
29562780 value=TranslateText(msl_info->image_info[n],
29572781 msl_info->attributes[n],
29582782 (char *) attributes[i]);
@@ -3030,23 +2854,14 @@
30302854 /* init the values */
30312855 double degrees = 0;
30322856
3033- if (msl_info->image[n] == (Image *) NULL)
3034- {
3035- ThrowException(msl_info->exception,OptionError,
3036- NoImagesDefined,(char *) name);
3037- break;
3038- }
2857+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2858+
30392859 if (attributes == (const xmlChar **) NULL)
30402860 break;
30412861 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
30422862 {
30432863 keyword=(const char *) attributes[i++];
3044- if (msl_info->attributes[n] == (Image *) NULL)
3045- {
3046- ThrowException(msl_info->exception,OptionError,
3047- NoImagesDefined,(char *) keyword);
3048- break;
3049- }
2864+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
30502865 value=TranslateText(msl_info->image_info[n],
30512866 msl_info->attributes[n],
30522867 (char *) attributes[i]);
@@ -3104,28 +2919,19 @@
31042919 {
31052920 if (LocaleCompare((char *) name,"sample") == 0)
31062921 {
2922+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
2923+
31072924 /* init the values */
31082925 width=msl_info->image[n]->columns;
31092926 height=msl_info->image[n]->rows;
31102927 x = y = 0;
31112928
3112- if (msl_info->image[n] == (Image *) NULL)
3113- {
3114- ThrowException(msl_info->exception,OptionError,
3115- NoImagesDefined,(char *) name);
3116- break;
3117- }
31182929 if (attributes == (const xmlChar **) NULL)
31192930 break;
31202931 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
31212932 {
31222933 keyword=(const char *) attributes[i++];
3123- if (msl_info->attributes[n] == (Image *) NULL)
3124- {
3125- ThrowException(msl_info->exception,OptionError,
3126- NoImagesDefined,(char *) keyword);
3127- break;
3128- }
2934+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
31292935 value=TranslateText(msl_info->image_info[n],
31302936 msl_info->attributes[n],
31312937 (char *) attributes[i]);
@@ -3200,28 +3006,19 @@
32003006 }
32013007 else if (LocaleCompare((char *) name,"scale") == 0)
32023008 {
3009+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3010+
32033011 /* init the values */
32043012 width=msl_info->image[n]->columns;
32053013 height=msl_info->image[n]->rows;
32063014 x = y = 0;
32073015
3208- if (msl_info->image[n] == (Image *) NULL)
3209- {
3210- ThrowException(msl_info->exception,OptionError,
3211- NoImagesDefined,(char *) name);
3212- break;
3213- }
32143016 if (attributes == (const xmlChar **) NULL)
32153017 break;
32163018 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
32173019 {
32183020 keyword=(const char *) attributes[i++];
3219- if (msl_info->attributes[n] == (Image *) NULL)
3220- {
3221- ThrowException(msl_info->exception,OptionError,
3222- NoImagesDefined,(char *) keyword);
3223- break;
3224- }
3021+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
32253022 value=TranslateText(msl_info->image_info[n],
32263023 msl_info->attributes[n],
32273024 (char *) attributes[i]);
@@ -3296,24 +3093,14 @@
32963093 }
32973094 else if (LocaleCompare((char *) name, "set") == 0)
32983095 {
3299- if (msl_info->image[n] == (Image *) NULL)
3300- {
3301- ThrowException(msl_info->exception,OptionError,
3302- NoImagesDefined,(char *) name);
3303- break;
3304- }
3096+ MSL_BREAK_IF_IMAGE_NULL(msl_info->image[n]);
33053097
33063098 if (attributes == (const xmlChar **) NULL)
33073099 break;
33083100 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
33093101 {
33103102 keyword=(const char *) attributes[i++];
3311- if (msl_info->attributes[n] == (Image *) NULL)
3312- {
3313- ThrowException(msl_info->exception,OptionError,
3314- NoImagesDefined,(char *) keyword);
3315- break;
3316- }
3103+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
33173104 value=TranslateText(msl_info->image_info[n],
33183105 msl_info->attributes[n],
33193106 (char *) attributes[i]);
@@ -3471,23 +3258,14 @@
34713258 double radius = 0.0,
34723259 sigma = 1.0;
34733260
3474- if (msl_info->image[n] == (Image *) NULL)
3475- {
3476- ThrowException(msl_info->exception,OptionError,
3477- NoImagesDefined,(char *) name);
3478- break;
3479- }
3261+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3262+
34803263 if (attributes != (const xmlChar **) NULL)
34813264 {
34823265 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
34833266 {
34843267 keyword=(const char *) attributes[i++];
3485- if (msl_info->attributes[n] == (Image *) NULL)
3486- {
3487- ThrowException(msl_info->exception,OptionError,
3488- NoImagesDefined,(char *) keyword);
3489- break;
3490- }
3268+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
34913269 value=TranslateText(msl_info->image_info[n],
34923270 msl_info->attributes[n],
34933271 (char *) attributes[i]);
@@ -3554,23 +3332,14 @@
35543332 width = height = 0;
35553333 x = y = 0;
35563334
3557- if (msl_info->image[n] == (Image *) NULL)
3558- {
3559- ThrowException(msl_info->exception,OptionError,
3560- NoImagesDefined,(char *) name);
3561- break;
3562- }
3335+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3336+
35633337 if (attributes == (const xmlChar **) NULL)
35643338 break;
35653339 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
35663340 {
35673341 keyword=(const char *) attributes[i++];
3568- if (msl_info->attributes[n] == (Image *) NULL)
3569- {
3570- ThrowException(msl_info->exception,OptionError,
3571- NoImagesDefined,(char *) keyword);
3572- break;
3573- }
3342+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
35743343 value=TranslateText(msl_info->image_info[n],
35753344 msl_info->attributes[n],
35763345 (char *) attributes[i]);
@@ -3653,28 +3422,19 @@
36533422 }
36543423 else if (LocaleCompare((char *) name,"shear") == 0)
36553424 {
3425+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3426+
36563427 /* init the values */
36573428 width=msl_info->image[n]->columns;
36583429 height=msl_info->image[n]->rows;
36593430 x = y = 0;
36603431
3661- if (msl_info->image[n] == (Image *) NULL)
3662- {
3663- ThrowException(msl_info->exception,OptionError,
3664- NoImagesDefined,(char *) name);
3665- break;
3666- }
36673432 if (attributes == (const xmlChar **) NULL)
36683433 break;
36693434 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
36703435 {
36713436 keyword=(const char *) attributes[i++];
3672- if (msl_info->attributes[n] == (Image *) NULL)
3673- {
3674- ThrowException(msl_info->exception,OptionError,
3675- NoImagesDefined,(char *) keyword);
3676- break;
3677- }
3437+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
36783438 value=TranslateText(msl_info->image_info[n],
36793439 msl_info->attributes[n],
36803440 (char *) attributes[i]);
@@ -3740,23 +3500,14 @@
37403500 /* init the values */
37413501 double threshold = 0;
37423502
3743- if (msl_info->image[n] == (Image *) NULL)
3744- {
3745- ThrowException(msl_info->exception,OptionError,
3746- NoImagesDefined,(char *) name);
3747- break;
3748- }
3503+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3504+
37493505 if (attributes == (const xmlChar **) NULL)
37503506 break;
37513507 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
37523508 {
37533509 keyword=(const char *) attributes[i++];
3754- if (msl_info->attributes[n] == (Image *) NULL)
3755- {
3756- ThrowException(msl_info->exception,OptionError,
3757- NoImagesDefined,(char *) keyword);
3758- break;
3759- }
3510+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
37603511 value=TranslateText(msl_info->image_info[n],
37613512 msl_info->attributes[n],
37623513 (char *) attributes[i]);
@@ -3801,23 +3552,14 @@
38013552 /* init the values */
38023553 unsigned int radius = 0;
38033554
3804- if (msl_info->image[n] == (Image *) NULL)
3805- {
3806- ThrowException(msl_info->exception,OptionError,
3807- NoImagesDefined,(char *) name);
3808- break;
3809- }
3555+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3556+
38103557 if (attributes == (const xmlChar **) NULL)
38113558 break;
38123559 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
38133560 {
38143561 keyword=(const char *) attributes[i++];
3815- if (msl_info->attributes[n] == (Image *) NULL)
3816- {
3817- ThrowException(msl_info->exception,OptionError,
3818- NoImagesDefined,(char *) keyword);
3819- break;
3820- }
3562+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
38213563 value=TranslateText(msl_info->image_info[n],
38223564 msl_info->attributes[n],
38233565 (char *) attributes[i]);
@@ -3870,23 +3612,14 @@
38703612 Image *
38713613 watermark = (Image*)NULL;
38723614
3873- if (msl_info->image[n] == (Image *) NULL)
3874- {
3875- ThrowException(msl_info->exception,OptionError,
3876- NoImagesDefined,(char *) name);
3877- break;
3878- }
3615+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3616+
38793617 if (attributes == (const xmlChar **) NULL)
38803618 break;
38813619 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
38823620 {
38833621 keyword=(const char *) attributes[i++];
3884- if (msl_info->attributes[n] == (Image *) NULL)
3885- {
3886- ThrowException(msl_info->exception,OptionError,
3887- NoImagesDefined,(char *) keyword);
3888- break;
3889- }
3622+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
38903623 value=TranslateText(msl_info->image_info[n],
38913624 msl_info->attributes[n],
38923625 (char *) attributes[i]);
@@ -3953,23 +3686,14 @@
39533686 Image *
39543687 stereoImage = (Image*)NULL;
39553688
3956- if (msl_info->image[n] == (Image *) NULL)
3957- {
3958- ThrowException(msl_info->exception,OptionError,
3959- NoImagesDefined,(char *) name);
3960- break;
3961- }
3689+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3690+
39623691 if (attributes == (const xmlChar **) NULL)
39633692 break;
39643693 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
39653694 {
39663695 keyword=(const char *) attributes[i++];
3967- if (msl_info->attributes[n] == (Image *) NULL)
3968- {
3969- ThrowException(msl_info->exception,OptionError,
3970- NoImagesDefined,(char *) keyword);
3971- break;
3972- }
3696+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
39733697 value=TranslateText(msl_info->image_info[n],
39743698 msl_info->attributes[n],
39753699 (char *) attributes[i]);
@@ -4036,23 +3760,14 @@
40363760 /* init the values */
40373761 double degrees = 0;
40383762
4039- if (msl_info->image[n] == (Image *) NULL)
4040- {
4041- ThrowException(msl_info->exception,OptionError,
4042- NoImagesDefined,(char *) name);
4043- break;
4044- }
3763+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3764+
40453765 if (attributes == (const xmlChar **) NULL)
40463766 break;
40473767 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
40483768 {
40493769 keyword=(const char *) attributes[i++];
4050- if (msl_info->attributes[n] == (Image *) NULL)
4051- {
4052- ThrowException(msl_info->exception,OptionError,
4053- NoImagesDefined,(char *) keyword);
4054- break;
4055- }
3770+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
40563771 value=TranslateText(msl_info->image_info[n],
40573772 msl_info->attributes[n],
40583773 (char *) attributes[i]);
@@ -4149,12 +3864,7 @@
41493864 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
41503865 {
41513866 keyword=(const char *) attributes[i++];
4152- if (msl_info->attributes[n] == (Image *) NULL)
4153- {
4154- ThrowException(msl_info->exception,OptionError,
4155- NoImagesDefined,(char *) keyword);
4156- break;
4157- }
3867+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
41583868 value=TranslateText(msl_info->image_info[n],
41593869 msl_info->attributes[n],
41603870 (char *) attributes[i]);
@@ -4214,23 +3924,14 @@
42143924 /* init the values */
42153925 double threshold = 0;
42163926
4217- if (msl_info->image[n] == (Image *) NULL)
4218- {
4219- ThrowException(msl_info->exception,OptionError,
4220- NoImagesDefined,(char *) name);
4221- break;
4222- }
3927+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3928+
42233929 if (attributes == (const xmlChar **) NULL)
42243930 break;
42253931 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
42263932 {
42273933 keyword=(const char *) attributes[i++];
4228- if (msl_info->attributes[n] == (Image *) NULL)
4229- {
4230- ThrowException(msl_info->exception,OptionError,
4231- NoImagesDefined,(char *) keyword);
4232- break;
4233- }
3934+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
42343935 value=TranslateText(msl_info->image_info[n],
42353936 msl_info->attributes[n],
42363937 (char *) attributes[i]);
@@ -4275,23 +3976,15 @@
42753976 }
42763977 else if (LocaleCompare((char *) name, "transparent") == 0)
42773978 {
4278- if (msl_info->image[n] == (Image *) NULL)
4279- {
4280- ThrowException(msl_info->exception,OptionError,
4281- NoImagesDefined,(char *) name);
4282- break;
4283- }
3979+
3980+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
3981+
42843982 if (attributes == (const xmlChar **) NULL)
42853983 break;
42863984 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
42873985 {
42883986 keyword=(const char *) attributes[i++];
4289- if (msl_info->attributes[n] == (Image *) NULL)
4290- {
4291- ThrowException(msl_info->exception,OptionError,
4292- NoImagesDefined,(char *) keyword);
4293- break;
4294- }
3987+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
42953988 value=TranslateText(msl_info->image_info[n],
42963989 msl_info->attributes[n],
42973990 (char *) attributes[i]);
@@ -4335,12 +4028,7 @@
43354028 }
43364029 else if (LocaleCompare((char *) name, "trim") == 0)
43374030 {
4338- if (msl_info->image[n] == (Image *) NULL)
4339- {
4340- ThrowException(msl_info->exception,OptionError,
4341- NoImagesDefined,(char *) name);
4342- break;
4343- }
4031+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
43444032
43454033 /* no attributes here */
43464034
@@ -4373,23 +4061,14 @@
43734061 {
43744062 if (LocaleCompare((char *) name,"write") == 0)
43754063 {
4376- if (msl_info->image[n] == (Image *) NULL)
4377- {
4378- ThrowException(msl_info->exception,OptionError,
4379- NoImagesDefined,(char *) name);
4380- break;
4381- }
4064+ MSL_BREAK_IF_IMAGE_NOT_INSTANTIATED(msl_info->image[n]);
4065+
43824066 if (attributes == (const xmlChar **) NULL)
43834067 break;
43844068 for (i=0; (attributes[i] != (const xmlChar *) NULL); i++)
43854069 {
43864070 keyword=(const char *) attributes[i++];
4387- if (msl_info->attributes[n] == (Image *) NULL)
4388- {
4389- ThrowException(msl_info->exception,OptionError,
4390- NoImagesDefined,(char *) keyword);
4391- break;
4392- }
4071+ MSL_BREAK_IF_IMAGE_NULL(msl_info->attributes[n]);
43934072 value=TranslateText(msl_info->image_info[n],
43944073 msl_info->attributes[n],
43954074 (char *) attributes[i]);
diff -r 6a386072d064 -r dc28ec43d483 locale/C.mgk
--- a/locale/C.mgk Sat Jul 17 08:24:57 2021 -0500
+++ b/locale/C.mgk Sun Jul 18 09:58:45 2021 -0500
@@ -1029,27 +1029,7 @@
10291029 Matrix is not square (%s elements)
10301030 </Message>
10311031 <Message name="RegionAreaExceedsLimit">
1032- Region area exceeds implementation limit
1033- </Message>
1034- <Message name="MissingAnImageFilename">
1035- Missing an image filename
1036- </Message>
1037- <Message name="MissingArgument">
1038- Option '%s' requires an argument or argument is malformed
1039- </Message>
1040- <Message name="MustSpecifyAnImageName">
1041- Must specify a image name
1042- </Message>
1043- <Message name="MustSpecifyImageSize">
1044- Must specify image size
1045- </Message>
1046- <Message name="NoBlobDefined">
1047- No Binary Large OBjects defined
1048- </Message>
1049- <Message name="NoImagesDefined">
1050- No images defined
1051- </Message>
1052- <Message name="NonzeroWidthAndHeightRequired">
1032+NonzeroWidthAndHeightRequired">
10531033 Non-zero width and height required
10541034 </Message>
10551035 <Message name="NoProfileNameWasGiven">
diff -r 6a386072d064 -r dc28ec43d483 magick/transform.c
--- a/magick/transform.c Sat Jul 17 08:24:57 2021 -0500
+++ b/magick/transform.c Sun Jul 18 09:58:45 2021 -0500
@@ -1,5 +1,5 @@
11 /*
2-% Copyright (C) 2003 - 2020 GraphicsMagick Group
2+% Copyright (C) 2003 - 2021 GraphicsMagick Group
33 % Copyright (C) 2002 ImageMagick Studio
44 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
55 %
@@ -1515,6 +1515,8 @@
15151515 */
15161516 assert(image != (const Image *) NULL);
15171517 assert(image->signature == MagickSignature);
1518+ assert(image->columns != 0);
1519+ assert(image->rows != 0);
15181520 assert(exception != (ExceptionInfo *) NULL);
15191521 assert(exception->signature == MagickSignature);
15201522 roll_image=CloneImage(image,image->columns,image->rows,True,exception);
diff -r 6a386072d064 -r dc28ec43d483 magick/version.h
--- a/magick/version.h Sat Jul 17 08:24:57 2021 -0500
+++ b/magick/version.h Sun Jul 18 09:58:45 2021 -0500
@@ -38,8 +38,8 @@
3838 #define MagickLibVersion 0x252200
3939 #define MagickLibVersionText "1.4"
4040 #define MagickLibVersionNumber 25,22,0
41-#define MagickChangeDate "20210716"
42-#define MagickReleaseDate "snapshot-20210716"
41+#define MagickChangeDate "20210718"
42+#define MagickReleaseDate "snapshot-20210718"
4343
4444 /*
4545 The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r 6a386072d064 -r dc28ec43d483 www/Changelog.html
--- a/www/Changelog.html Sat Jul 17 08:24:57 2021 -0500
+++ b/www/Changelog.html Sun Jul 18 09:58:45 2021 -0500
@@ -35,6 +35,16 @@
3535 <div class="document">
3636
3737
38+<p>2021-07-18 Bob Friesenhahn &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
39+<blockquote>
40+<p>* coders/msl.c (MSLStartElement): Use macros to simplify
41+validations and reduce repeated code fragments. Add validations
42+for image size and pixels present where applicable. Fixes
43+oss-fuzz 36224 &quot;graphicsmagick:coder_MSL_fuzzer: Timeout in
44+coder_MSL_fuzzer&quot;.</p>
45+<p>* magick/transform.c (RollImage): Assert that image rows and
46+columns are not zero.</p>
47+</blockquote>
3848 <p>2021-07-16 Bob Friesenhahn &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
3949 <blockquote>
4050 * coders/jp2.c (initialize_jasper): Update for the latest version
Show on old repository browser