xml2: Replace deprecated routines with recommended ones
authorMichael Paquier <michael@paquier.xyz>
Tue, 16 Jan 2024 23:53:16 +0000 (08:53 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 16 Jan 2024 23:53:16 +0000 (08:53 +0900)
Some functions are used in the tree and are currently marked as
deprecated by upstream.  This commit refreshes the code to use the
recommended functions, leading to the following changes:
- xmlSubstituteEntitiesDefault() is gone, and needs to be replaced with
XML_PARSE_NOENT for the paths doing the parsing.
- xmlParseMemory() -> xmlReadMemory().

These functions, as well as more functions setting global states, have
been officially marked as deprecated by upstream in August 2022.  Their
replacements exist since the 2001-ish area, as far as I have checked,
so that should be safe.

Author: Dmitry Koval
Discussion: https://postgr.es/m/18274-98d16bc03520665f@postgresql.org

contrib/xml2/xpath.c
contrib/xml2/xslt_proc.c

index a692dc6be86dfd6a56d34b8d28d1b8d5e34861b9..a967257546ad9a541ed057bd2956adc0303635c8 100644 (file)
@@ -74,7 +74,6 @@ pgxml_parser_init(PgXmlStrictness strictness)
        /* Initialize libxml */
        xmlInitParser();
 
-       xmlSubstituteEntitiesDefault(1);
        xmlLoadExtDtdDefaultValue = 1;
 
        return xmlerrcxt;
@@ -380,8 +379,9 @@ pgxml_xpath(text *document, xmlChar *xpath, xpath_workspace *workspace)
 
        PG_TRY();
        {
-               workspace->doctree = xmlParseMemory((char *) VARDATA_ANY(document),
-                                                                                       docsize);
+               workspace->doctree = xmlReadMemory((char *) VARDATA_ANY(document),
+                                                                                  docsize, NULL, NULL,
+                                                                                  XML_PARSE_NOENT);
                if (workspace->doctree != NULL)
                {
                        workspace->ctxt = xmlXPathNewContext(workspace->doctree);
@@ -624,7 +624,9 @@ xpath_table(PG_FUNCTION_ARGS)
 
                        /* Parse the document */
                        if (xmldoc)
-                               doctree = xmlParseMemory(xmldoc, strlen(xmldoc));
+                               doctree = xmlReadMemory(xmldoc, strlen(xmldoc),
+                                                                               NULL, NULL,
+                                                                               XML_PARSE_NOENT);
                        else                            /* treat NULL as not well-formed */
                                doctree = NULL;
 
index 2189bca86ff63b6b544e2e9ea248d9a0a322a27a..f30a3a42c03e9328d25f44a5d87b8eee76919938 100644 (file)
@@ -85,16 +85,18 @@ xslt_process(PG_FUNCTION_ARGS)
                bool            xslt_sec_prefs_error;
 
                /* Parse document */
-               doctree = xmlParseMemory((char *) VARDATA_ANY(doct),
-                                                                VARSIZE_ANY_EXHDR(doct));
+               doctree = xmlReadMemory((char *) VARDATA_ANY(doct),
+                                                               VARSIZE_ANY_EXHDR(doct), NULL, NULL,
+                                                               XML_PARSE_NOENT);
 
                if (doctree == NULL)
                        xml_ereport(xmlerrcxt, ERROR, ERRCODE_EXTERNAL_ROUTINE_EXCEPTION,
                                                "error parsing XML document");
 
                /* Same for stylesheet */
-               ssdoc = xmlParseMemory((char *) VARDATA_ANY(ssheet),
-                                                          VARSIZE_ANY_EXHDR(ssheet));
+               ssdoc = xmlReadMemory((char *) VARDATA_ANY(ssheet),
+                                                         VARSIZE_ANY_EXHDR(ssheet), NULL, NULL,
+                                                         XML_PARSE_NOENT);
 
                if (ssdoc == NULL)
                        xml_ereport(xmlerrcxt, ERROR, ERRCODE_EXTERNAL_ROUTINE_EXCEPTION,