#include "lcms2.h"
#endif
#endif
-
+#if defined(MAGICKCORE_XML_DELEGATE)
+# if defined(MAGICKCORE_WINDOWS_SUPPORT)
+# if !defined(__MINGW32__)
+# include <win32config.h>
+# endif
+# endif
+# include <libxml/parser.h>
+# include <libxml/tree.h>
+#endif
+\f
/*
Definitions
*/
}
}
+static MagickBooleanType ValidateXMPProfile(const StringInfo *profile)
+{
+#if defined(MAGICKCORE_XML_DELEGATE)
+ {
+ xmlDocPtr
+ document;
+
+ /*
+ Parse XML profile.
+ */
+ document=xmlReadMemory((const char *) GetStringInfoDatum(profile),(int)
+ GetStringInfoLength(profile),"xmp.xml",NULL,XML_PARSE_NOERROR |
+ XML_PARSE_NOWARNING);
+ if (document == (xmlDocPtr) NULL)
+ return(MagickFalse);
+ xmlFreeDoc(document);
+ return(MagickTrue);
+ }
+#else
+ return(MagickTrue);
+#endif
+}
+
static MagickBooleanType SetImageProfileInternal(Image *image,const char *name,
const StringInfo *profile,const MagickBooleanType recursive,
ExceptionInfo *exception)
assert(image->signature == MagickCoreSignature);
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+ if ((LocaleCompare(name,"xmp") == 0) &&
+ (ValidateXMPProfile(profile) == MagickFalse))
+ {
+ (void) ThrowMagickException(exception,GetMagickModule(),ImageWarning,
+ "CorruptImageProfile","`%s'",name);
+ return(MagickFalse);
+ }
if (image->profiles == (SplayTreeInfo *) NULL)
image->profiles=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
DestroyProfile);
#include "lcms.h"
#endif
#endif
-#if defined(MAGICKCORE_XML_DELEGATE)
-# if defined(MAGICKCORE_WINDOWS_SUPPORT)
-# if !defined(__MINGW32__)
-# include <win32config.h>
-# endif
-# endif
-# include <libxml/parser.h>
-# include <libxml/tree.h>
-#endif
\f
/*
Define declarations.
return(MagickTrue);
}
-static MagickBooleanType ValidateXMPProfile(const char *profile,
- const size_t length)
-{
-#if defined(MAGICKCORE_XML_DELEGATE)
- {
- xmlDocPtr
- document;
-
- /*
- Parse XML profile.
- */
- document=xmlReadMemory(profile,(int) length,"xmp.xml",NULL,
- XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
- if (document == (xmlDocPtr) NULL)
- return(MagickFalse);
- xmlFreeDoc(document);
- return(MagickTrue);
- }
-#else
- return(MagickFalse);
-#endif
-}
-
static MagickBooleanType GetXMPProperty(const Image *image,const char *property)
{
char
xmp_profile=StringInfoToString(profile);
if (xmp_profile == (char *) NULL)
return(MagickFalse);
- if (ValidateXMPProfile(xmp_profile,GetStringInfoLength(profile)) == MagickFalse)
- {
- xmp_profile=DestroyString(xmp_profile);
- return(MagickFalse);
- }
for (p=xmp_profile; *p != '\0'; p++)
if ((*p == '<') && (*(p+1) == 'x'))
break;