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,