43#include "magick/studio.h"
44#include "magick/coder.h"
45#include "magick/exception-private.h"
46#include "magick/image.h"
47#include "magick/module.h"
48#include "magick/policy.h"
49#include "magick/static.h"
50#include "magick/string_.h"
55ModuleExport
size_t RegisterUndefinedImage(
void)
57 return(MagickImageCoderSignature);
60ModuleExport
void UnregisterUndefinedImage(
void)
76 (*register_module)(void);
79 (*unregister_module)(void);
82#if !defined(MAGICKCORE_BUILD_MODULES)
83 {
"AAI", MagickFalse, RegisterAAIImage, UnregisterAAIImage },
84 {
"ART", MagickFalse, RegisterARTImage, UnregisterARTImage },
85 {
"AVS", MagickFalse, RegisterAVSImage, UnregisterAVSImage },
86 {
"BGR", MagickFalse, RegisterBGRImage, UnregisterBGRImage },
87 {
"BMP", MagickFalse, RegisterBMPImage, UnregisterBMPImage },
88 {
"BRAILLE", MagickFalse, RegisterBRAILLEImage, UnregisterBRAILLEImage },
89 {
"CALS", MagickFalse, RegisterCALSImage, UnregisterCALSImage },
90 {
"CAPTION", MagickFalse, RegisterCAPTIONImage, UnregisterCAPTIONImage },
91 {
"CIN", MagickFalse, RegisterCINImage, UnregisterCINImage },
92 {
"CIP", MagickFalse, RegisterCIPImage, UnregisterCIPImage },
93 {
"CLIP", MagickFalse, RegisterCLIPImage, UnregisterCLIPImage },
94#if defined(MAGICKCORE_WINGDI32_DELEGATE)
95 {
"CLIPBOARD", MagickFalse, RegisterCLIPBOARDImage, UnregisterCLIPBOARDImage },
97 {
"CMYK", MagickFalse, RegisterCMYKImage, UnregisterCMYKImage },
98 {
"CUT", MagickFalse, RegisterCUTImage, UnregisterCUTImage },
99 {
"DCM", MagickFalse, RegisterDCMImage, UnregisterDCMImage },
100 {
"DDS", MagickFalse, RegisterDDSImage, UnregisterDDSImage },
101 {
"DEBUG", MagickFalse, RegisterDEBUGImage, UnregisterDEBUGImage },
102 {
"DIB", MagickFalse, RegisterDIBImage, UnregisterDIBImage },
103#if defined(MAGICKCORE_DJVU_DELEGATE)
104 {
"DJVU", MagickFalse, RegisterDJVUImage, UnregisterDJVUImage },
106 {
"DNG", MagickFalse, RegisterDNGImage, UnregisterDNGImage },
107#if defined(MAGICKCORE_DPS_DELEGATE)
108 {
"DPS", MagickFalse, RegisterDPSImage, UnregisterDPSImage },
110 {
"DPX", MagickFalse, RegisterDPXImage, UnregisterDPXImage },
111#if defined(MAGICKCORE_WINGDI32_DELEGATE)
112 {
"EMF", MagickFalse, RegisterEMFImage, UnregisterEMFImage },
114#if defined(MAGICKCORE_TIFF_DELEGATE)
115 {
"EPT", MagickFalse, RegisterEPTImage, UnregisterEPTImage },
117#if defined(MAGICKCORE_OPENEXR_DELEGATE)
118 {
"EXR", MagickFalse, RegisterEXRImage, UnregisterEXRImage },
120 {
"FAX", MagickFalse, RegisterFAXImage, UnregisterFAXImage },
121 {
"FITS", MagickFalse, RegisterFITSImage, UnregisterFITSImage },
122#if defined(MAGICKCORE_FLIF_DELEGATE)
123 {
"FLIF", MagickFalse, RegisterFLIFImage, UnregisterFLIFImage },
125#if defined(MAGICKCORE_FPX_DELEGATE)
126 {
"FPX", MagickFalse, RegisterFPXImage, UnregisterFPXImage },
128 {
"GIF", MagickFalse, RegisterGIFImage, UnregisterGIFImage },
129 {
"GRAY", MagickFalse, RegisterGRAYImage, UnregisterGRAYImage },
130 {
"GRADIENT", MagickFalse, RegisterGRADIENTImage, UnregisterGRADIENTImage },
131 {
"HALD", MagickFalse, RegisterHALDImage, UnregisterHALDImage },
132 {
"HDR", MagickFalse, RegisterHDRImage, UnregisterHDRImage },
133#if defined(MAGICKCORE_HEIC_DELEGATE)
134 {
"HEIC", MagickFalse, RegisterHEICImage, UnregisterHEICImage },
136 {
"HISTOGRAM", MagickFalse, RegisterHISTOGRAMImage, UnregisterHISTOGRAMImage },
137 {
"HRZ", MagickFalse, RegisterHRZImage, UnregisterHRZImage },
138 {
"HTML", MagickFalse, RegisterHTMLImage, UnregisterHTMLImage },
139 {
"ICON", MagickFalse, RegisterICONImage, UnregisterICONImage },
140 {
"INFO", MagickFalse, RegisterINFOImage, UnregisterINFOImage },
141 {
"INLINE", MagickFalse, RegisterINLINEImage, UnregisterINLINEImage },
142 {
"IPL", MagickFalse, RegisterIPLImage, UnregisterIPLImage },
143#if defined(MAGICKCORE_JBIG_DELEGATE)
144 {
"JBIG", MagickFalse, RegisterJBIGImage, UnregisterJBIGImage },
146 {
"JNX", MagickFalse, RegisterJNXImage, UnregisterJNXImage },
147#if defined(MAGICKCORE_JPEG_DELEGATE)
148 {
"JPEG", MagickFalse, RegisterJPEGImage, UnregisterJPEGImage },
150#if defined(MAGICKCORE_LIBOPENJP2_DELEGATE)
151 {
"JP2", MagickFalse, RegisterJP2Image, UnregisterJP2Image },
153 {
"JSON", MagickFalse, RegisterJSONImage, UnregisterJSONImage },
154 {
"LABEL", MagickFalse, RegisterLABELImage, UnregisterLABELImage },
155 {
"MAC", MagickFalse, RegisterMACImage, UnregisterMACImage },
156 {
"MAGICK", MagickFalse, RegisterMAGICKImage, UnregisterMAGICKImage },
157 {
"MAP", MagickFalse, RegisterMAPImage, UnregisterMAPImage },
158 {
"MAT", MagickFalse, RegisterMATImage, UnregisterMATImage },
159 {
"MATTE", MagickFalse, RegisterMATTEImage, UnregisterMATTEImage },
160 {
"MASK", MagickFalse, RegisterMASKImage, UnregisterMASKImage },
161 {
"META", MagickFalse, RegisterMETAImage, UnregisterMETAImage },
162 {
"MIFF", MagickFalse, RegisterMIFFImage, UnregisterMIFFImage },
163 {
"MONO", MagickFalse, RegisterMONOImage, UnregisterMONOImage },
164 {
"MPC", MagickFalse, RegisterMPCImage, UnregisterMPCImage },
165 {
"MPR", MagickFalse, RegisterMPRImage, UnregisterMPRImage },
166 {
"MSL", MagickFalse, RegisterMSLImage, UnregisterMSLImage },
167 {
"MTV", MagickFalse, RegisterMTVImage, UnregisterMTVImage },
168 {
"MVG", MagickFalse, RegisterMVGImage, UnregisterMVGImage },
169 {
"NULL", MagickFalse, RegisterNULLImage, UnregisterNULLImage },
170 {
"OTB", MagickFalse, RegisterOTBImage, UnregisterOTBImage },
171 {
"PALM", MagickFalse, RegisterPALMImage, UnregisterPALMImage },
172 {
"PANGO", MagickFalse, RegisterPANGOImage, UnregisterPANGOImage },
173 {
"PATTERN", MagickFalse, RegisterPATTERNImage, UnregisterPATTERNImage },
174 {
"PCD", MagickFalse, RegisterPCDImage, UnregisterPCDImage },
175 {
"PCL", MagickFalse, RegisterPCLImage, UnregisterPCLImage },
176 {
"PCX", MagickFalse, RegisterPCXImage, UnregisterPCXImage },
177 {
"PDB", MagickFalse, RegisterPDBImage, UnregisterPDBImage },
178 {
"PDF", MagickFalse, RegisterPDFImage, UnregisterPDFImage },
179 {
"PES", MagickFalse, RegisterPESImage, UnregisterPESImage },
180 {
"PGX", MagickFalse, RegisterPGXImage, UnregisterPGXImage },
181 {
"PICT", MagickFalse, RegisterPICTImage, UnregisterPICTImage },
182 {
"PIX", MagickFalse, RegisterPIXImage, UnregisterPIXImage },
183 {
"PLASMA", MagickFalse, RegisterPLASMAImage, UnregisterPLASMAImage },
184#if defined(MAGICKCORE_PNG_DELEGATE)
185 {
"PNG", MagickFalse, RegisterPNGImage, UnregisterPNGImage },
187 {
"PNM", MagickFalse, RegisterPNMImage, UnregisterPNMImage },
188 {
"PS", MagickFalse, RegisterPSImage, UnregisterPSImage },
189 {
"PS2", MagickFalse, RegisterPS2Image, UnregisterPS2Image },
190 {
"PS3", MagickFalse, RegisterPS3Image, UnregisterPS3Image },
191 {
"PSD", MagickFalse, RegisterPSDImage, UnregisterPSDImage },
192 {
"PWP", MagickFalse, RegisterPWPImage, UnregisterPWPImage },
193 {
"RAW", MagickFalse, RegisterRAWImage, UnregisterRAWImage },
194 {
"RGB", MagickFalse, RegisterRGBImage, UnregisterRGBImage },
195 {
"RGF", MagickFalse, RegisterRGFImage, UnregisterRGFImage },
196 {
"RLA", MagickFalse, RegisterRLAImage, UnregisterRLAImage },
197 {
"RLE", MagickFalse, RegisterRLEImage, UnregisterRLEImage },
198 {
"SCR", MagickFalse, RegisterSCRImage, UnregisterSCRImage },
199 {
"SCREENSHOT", MagickFalse, RegisterSCREENSHOTImage, UnregisterSCREENSHOTImage },
200 {
"SCT", MagickFalse, RegisterSCTImage, UnregisterSCTImage },
201 {
"SFW", MagickFalse, RegisterSFWImage, UnregisterSFWImage },
202 {
"SGI", MagickFalse, RegisterSGIImage, UnregisterSGIImage },
203 {
"SIXEL", MagickFalse, RegisterSIXELImage, UnregisterSIXELImage },
204 {
"STEGANO", MagickFalse, RegisterSTEGANOImage, UnregisterSTEGANOImage },
205 {
"SUN", MagickFalse, RegisterSUNImage, UnregisterSUNImage },
206 {
"SVG", MagickFalse, RegisterSVGImage, UnregisterSVGImage },
207 {
"TGA", MagickFalse, RegisterTGAImage, UnregisterTGAImage },
208 {
"THUMBNAIL", MagickFalse, RegisterTHUMBNAILImage, UnregisterTHUMBNAILImage },
209#if defined(MAGICKCORE_TIFF_DELEGATE)
210 {
"TIFF", MagickFalse, RegisterTIFFImage, UnregisterTIFFImage },
212 {
"TILE", MagickFalse, RegisterTILEImage, UnregisterTILEImage },
213 {
"TIM", MagickFalse, RegisterTIMImage, UnregisterTIMImage },
214 {
"TTF", MagickFalse, RegisterTTFImage, UnregisterTTFImage },
215 {
"TXT", MagickFalse, RegisterTXTImage, UnregisterTXTImage },
216 {
"UIL", MagickFalse, RegisterUILImage, UnregisterUILImage },
217 {
"URL", MagickFalse, RegisterURLImage, UnregisterURLImage },
218 {
"UYVY", MagickFalse, RegisterUYVYImage, UnregisterUYVYImage },
219 {
"VICAR", MagickFalse, RegisterVICARImage, UnregisterVICARImage },
220 {
"VID", MagickFalse, RegisterVIDImage, UnregisterVIDImage },
221 {
"VIDEO", MagickFalse, RegisterVIDEOImage, UnregisterVIDEOImage },
222 {
"VIFF", MagickFalse, RegisterVIFFImage, UnregisterVIFFImage },
223 {
"VIPS", MagickFalse, RegisterVIPSImage, UnregisterVIPSImage },
224 {
"WBMP", MagickFalse, RegisterWBMPImage, UnregisterWBMPImage },
225#if defined(MAGICKCORE_WEBP_DELEGATE)
226 {
"WEBP", MagickFalse, RegisterWEBPImage, UnregisterWEBPImage },
228#if defined(MAGICKCORE_WMF_DELEGATE) || defined(MAGICKCORE_WMFLITE_DELEGATE)
229 {
"WMF", MagickFalse, RegisterWMFImage, UnregisterWMFImage },
231 {
"WPG", MagickFalse, RegisterWPGImage, UnregisterWPGImage },
232#if defined(MAGICKCORE_X11_DELEGATE)
233 {
"X", MagickFalse, RegisterXImage, UnregisterXImage },
235 {
"XBM", MagickFalse, RegisterXBMImage, UnregisterXBMImage },
236 {
"XC", MagickFalse, RegisterXCImage, UnregisterXCImage },
237 {
"XCF", MagickFalse, RegisterXCFImage, UnregisterXCFImage },
238 {
"XPM", MagickFalse, RegisterXPMImage, UnregisterXPMImage },
239 {
"XPS", MagickFalse, RegisterXPSImage, UnregisterXPSImage },
240#if defined(MAGICKCORE_X11_DELEGATE)
241 {
"XWD", MagickFalse, RegisterXWDImage, UnregisterXWDImage },
243 {
"YCBCR", MagickFalse, RegisterYCBCRImage, UnregisterYCBCRImage },
244 {
"YUV", MagickFalse, RegisterYUVImage, UnregisterYUVImage },
246 { (
const char *) NULL, MagickFalse, RegisterUndefinedImage, UnregisterUndefinedImage }
282#if defined(MAGICKCORE_MODULES_SUPPORT)
283MagickExport MagickBooleanType InvokeStaticImageFilter(
const char *tag,
289 assert(image != (
Image **) NULL);
290 assert((*image)->signature == MagickCoreSignature);
291 if (IsEventLogging() != MagickFalse)
292 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",(*image)->filename);
293 rights=ReadPolicyRights;
294 if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
297 (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
298 "NotAuthorized",
"`%s'",tag);
301#if defined(MAGICKCORE_MODULES_SUPPORT)
314 image_filter=(ImageFilterHandler *) NULL;
315 if (LocaleCompare(
"analyze",tag) == 0)
316 image_filter=(ImageFilterHandler *) analyzeImage;
317 if (image_filter == (ImageFilterHandler *) NULL)
318 (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
319 "UnableToLoadModule",
"`%s'",tag);
325 if ((*image)->debug != MagickFalse)
326 (void) LogMagickEvent(TransformEvent,GetMagickModule(),
327 "Invoking \"%s\" static image filter",tag);
328 signature=image_filter(image,argc,argv,exception);
329 if ((*image)->debug != MagickFalse)
330 (void) LogMagickEvent(TransformEvent,GetMagickModule(),
331 "\"%s\" completes",tag);
332 if (signature != MagickImageFilterSignature)
334 (void) ThrowMagickException(exception,GetMagickModule(),ModuleError,
335 "ImageFilterSignatureMismatch",
"'%s': %8lx != %8lx",tag,
336 (
unsigned long) signature,(
unsigned long)
337 MagickImageFilterSignature);
372MagickExport MagickBooleanType RegisterStaticModule(
const char *module,
376 module_name[MagickPathExtent];
393 assert(module != (
const char *) NULL);
394 (void) CopyMagickString(module_name,module,MagickPathExtent);
395 p=GetCoderInfo(module,exception);
397 (void) CopyMagickString(module_name,p->name,MagickPathExtent);
398 rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
399 if (IsRightsAuthorized(ModulePolicyDomain,rights,module_name) == MagickFalse)
402 (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
403 "NotAuthorized",
"`%s'",module);
406 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
407 for (i=0; i < (ssize_t) extent; i++)
408 if (LocaleCompare(MagickModules[i].module,module_name) == 0)
410 if (MagickModules[i].registered == MagickFalse)
412 (void) (MagickModules[i].register_module)();
413 MagickModules[i].registered=MagickTrue;
439MagickExport
void RegisterStaticModules(
void)
450 rights=(PolicyRights) (ReadPolicyRights | WritePolicyRights);
451 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
452 for (i=0; i < (ssize_t) extent; i++)
454 if (MagickModules[i].registered == MagickFalse)
456 if (IsRightsAuthorized(ModulePolicyDomain,rights,MagickModules[i].module) == MagickFalse)
458 (void) (MagickModules[i].register_module)();
459 MagickModules[i].registered=MagickTrue;
486MagickExport MagickBooleanType UnregisterStaticModule(
const char *module)
494 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
495 for (i=0; i < (ssize_t) extent; i++)
496 if (LocaleCompare(MagickModules[i].module,module) == 0)
498 if (MagickModules[i].registered != MagickFalse)
500 (MagickModules[i].unregister_module)();
501 MagickModules[i].registered=MagickFalse;
527MagickExport
void UnregisterStaticModules(
void)
535 extent=
sizeof(MagickModules)/
sizeof(MagickModules[0]);
536 for (i=0; i < (ssize_t) extent; i++)
538 if (MagickModules[i].registered != MagickFalse)
540 (MagickModules[i].unregister_module)();
541 MagickModules[i].registered=MagickFalse;