Commit 223fccf8f for imagemagick.org

commit 223fccf8f8eb542a8bd844ffeb056b3a3840c2c8
Author: Dirk Lemstra <dirk@lemstra.org>
Date:   Sun Oct 4 18:14:02 2026 +0200

    Moved SubstituteXMLEntities so we don't duplicate the method.

diff --git a/MagickCore/xml-tree-private.h b/MagickCore/xml-tree-private.h
index c8d4843a1..7223a5c0a 100644
--- a/MagickCore/xml-tree-private.h
+++ b/MagickCore/xml-tree-private.h
@@ -28,95 +28,6 @@
 extern "C" {
 #endif

-static inline char *SubstituteXMLEntities(const char *content,
-  const MagickBooleanType pedantic)
-{
-  char
-    *canonical_content;
-
-  const char
-    *p;
-
-  size_t
-    extent;
-
-  ssize_t
-    i;
-
-  /*
-    Substitute predefined entities.
-  */
-  i=0;
-  canonical_content=AcquireString((char *) NULL);
-  extent=MagickPathExtent;
-  for (p=content; *p != '\0'; p++)
-  {
-    if ((i+MagickPathExtent) > (ssize_t) extent)
-      {
-        extent+=MagickPathExtent;
-        canonical_content=(char *) ResizeQuantumMemory(canonical_content,extent,
-          sizeof(*canonical_content));
-        if (canonical_content == (char *) NULL)
-          return(canonical_content);
-      }
-    switch (*p)
-    {
-      case '&':
-      {
-        i+=FormatLocaleString(canonical_content+i,extent,"&amp;");
-        break;
-      }
-      case '<':
-      {
-        i+=FormatLocaleString(canonical_content+i,extent,"&lt;");
-        break;
-      }
-      case '>':
-      {
-        i+=FormatLocaleString(canonical_content+i,extent,"&gt;");
-        break;
-      }
-      case '"':
-      {
-        i+=FormatLocaleString(canonical_content+i,extent,"&quot;");
-        break;
-      }
-      case '\n':
-      {
-        if (pedantic == MagickFalse)
-          {
-            canonical_content[i++]=(char) (*p);
-            break;
-          }
-        i+=FormatLocaleString(canonical_content+i,extent,"&#xA;");
-        break;
-      }
-      case '\t':
-      {
-        if (pedantic == MagickFalse)
-          {
-            canonical_content[i++]=(char) (*p);
-            break;
-          }
-        i+=FormatLocaleString(canonical_content+i,extent,"&#x9;");
-        break;
-      }
-      case '\r':
-      {
-        i+=FormatLocaleString(canonical_content+i,extent,"&#xD;");
-        break;
-      }
-      default:
-      {
-        canonical_content[i++]=(char) (*p);
-        break;
-      }
-    }
-  }
-  canonical_content[i]='\0';
-  return(canonical_content);
-}
-
 extern MagickPrivate char
   *FileToXML(const char *,const size_t);

@@ -126,6 +37,9 @@ extern MagickPrivate MagickBooleanType
 extern MagickPrivate void
   SkipXMLComment(const char **);

+extern MagickExport char
+  *SubstituteXMLEntities(const char *,const MagickBooleanType);
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif
diff --git a/MagickCore/xml-tree.c b/MagickCore/xml-tree.c
index 9b01ff6e8..194108d20 100644
--- a/MagickCore/xml-tree.c
+++ b/MagickCore/xml-tree.c
@@ -2202,6 +2202,109 @@ MagickPrivate MagickBooleanType SkipXMLDocType(const char **xml)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   S u b s t i t u t e X M L E n t i t i e s                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  SubstituteXMLEntities() substitutes the predefined XML entities.
+%
+*/
+MagickExport char *SubstituteXMLEntities(const char *content,
+  const MagickBooleanType pedantic)
+{
+  char
+    *canonical_content;
+
+  const char
+    *p;
+
+  size_t
+    extent;
+
+  ssize_t
+    i;
+
+  /*
+    Substitute predefined entities.
+  */
+  i=0;
+  canonical_content=AcquireString((char *) NULL);
+  extent=MagickPathExtent;
+  for (p=content; *p != '\0'; p++)
+  {
+    if ((i+MagickPathExtent) > (ssize_t) extent)
+      {
+        extent+=MagickPathExtent;
+        canonical_content=(char *) ResizeQuantumMemory(canonical_content,extent,
+          sizeof(*canonical_content));
+        if (canonical_content == (char *) NULL)
+          return(canonical_content);
+      }
+    switch (*p)
+    {
+      case '&':
+      {
+        i+=FormatLocaleString(canonical_content+i,extent,"&amp;");
+        break;
+      }
+      case '<':
+      {
+        i+=FormatLocaleString(canonical_content+i,extent,"&lt;");
+        break;
+      }
+      case '>':
+      {
+        i+=FormatLocaleString(canonical_content+i,extent,"&gt;");
+        break;
+      }
+      case '"':
+      {
+        i+=FormatLocaleString(canonical_content+i,extent,"&quot;");
+        break;
+      }
+      case '\n':
+      {
+        if (pedantic == MagickFalse)
+          {
+            canonical_content[i++]=(char) (*p);
+            break;
+          }
+        i+=FormatLocaleString(canonical_content+i,extent,"&#xA;");
+        break;
+      }
+      case '\t':
+      {
+        if (pedantic == MagickFalse)
+          {
+            canonical_content[i++]=(char) (*p);
+            break;
+          }
+        i+=FormatLocaleString(canonical_content+i,extent,"&#x9;");
+        break;
+      }
+      case '\r':
+      {
+        i+=FormatLocaleString(canonical_content+i,extent,"&#xD;");
+        break;
+      }
+      default:
+      {
+        canonical_content[i++]=(char) (*p);
+        break;
+      }
+    }
+  }
+  canonical_content[i]='\0';
+  return(canonical_content);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   X M L T r e e I n f o T o X M L                                           %
 %                                                                             %
 %                                                                             %