]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Remove xmlCleanupParser calls from contrib/xml2.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Mar 2010 05:16:54 +0000 (05:16 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Mar 2010 05:16:54 +0000 (05:16 +0000)
These are unnecessary and probably dangerous.  I don't see any immediate
risk situations in the core XML support or contrib/xml2 itself, but there
could be issues with external uses of libxml2, and in any case it's an
accident waiting to happen.

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

index 4151398a1f619d59b7814cbba94d9d2096ab0589..9c091c9572ca144114ae01caf4ce2a0f258171a5 100644 (file)
@@ -142,12 +142,8 @@ xml_is_well_formed(PG_FUNCTION_ARGS)
 
        doctree = xmlParseMemory((char *) VARDATA(t), docsize);
        if (doctree == NULL)
-       {
-               xmlCleanupParser();
                PG_RETURN_BOOL(false);  /* i.e. not well-formed */
-       }
        xmlFreeDoc(doctree);
-       xmlCleanupParser();
        PG_RETURN_BOOL(true);
 }
 
@@ -305,7 +301,6 @@ xpath_nodeset(PG_FUNCTION_ARGS)
        xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath),
                                                                 toptag, septag, NULL);
 
-       /* xmlCleanupParser(); done by result_to_text routine */
        pfree(xpath);
 
        if (xpres == NULL)
@@ -340,7 +335,6 @@ xpath_list(PG_FUNCTION_ARGS)
        xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath),
                                                                 NULL, NULL, plainsep);
 
-       /* xmlCleanupParser(); done by result_to_text routine */
        pfree(xpath);
 
        if (xpres == NULL)
@@ -379,7 +373,6 @@ xpath_string(PG_FUNCTION_ARGS)
        xpres = pgxml_result_to_text(pgxml_xpath(PG_GETARG_TEXT_P(0), xpath),
                                                                 NULL, NULL, NULL);
 
-       xmlCleanupParser();
        pfree(xpath);
 
        if (xpres == NULL)
@@ -411,13 +404,10 @@ xpath_number(PG_FUNCTION_ARGS)
        pfree(xpath);
 
        if (res == NULL)
-       {
-               xmlCleanupParser();
                PG_RETURN_NULL();
-       }
 
        fRes = xmlXPathCastToNumber(res);
-       xmlCleanupParser();
+
        if (xmlXPathIsNaN(fRes))
                PG_RETURN_NULL();
 
@@ -448,13 +438,10 @@ xpath_bool(PG_FUNCTION_ARGS)
        pfree(xpath);
 
        if (res == NULL)
-       {
-               xmlCleanupParser();
                PG_RETURN_BOOL(false);
-       }
 
        bRes = xmlXPathCastToBoolean(res);
-       xmlCleanupParser();
+
        PG_RETURN_BOOL(bRes);
 }
 
@@ -477,9 +464,7 @@ pgxml_xpath(text *document, xmlChar *xpath)
 
        doctree = xmlParseMemory((char *) VARDATA(document), docsize);
        if (doctree == NULL)
-       {                                                       /* not well-formed */
-               return NULL;
-       }
+               return NULL;                    /* not well-formed */
 
        ctxt = xmlXPathNewContext(doctree);
        ctxt->node = xmlDocGetRootElement(doctree);
@@ -488,7 +473,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
        comppath = xmlXPathCompile(xpath);
        if (comppath == NULL)
        {
-               xmlCleanupParser();
                xmlFreeDoc(doctree);
                elog_error("XPath Syntax Error", true);
        }
@@ -500,7 +484,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
        if (res == NULL)
        {
                xmlXPathFreeContext(ctxt);
-               /* xmlCleanupParser(); */
                xmlFreeDoc(doctree);
 
                return NULL;
@@ -520,10 +503,8 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
        text       *xpres;
 
        if (res == NULL)
-       {
-               xmlCleanupParser();
                return NULL;
-       }
+
        switch (res->type)
        {
                case XPATH_NODESET:
@@ -548,9 +529,6 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
        VARATT_SIZEP(xpres) = ressize + VARHDRSZ;
 
        /* Free various storage */
-       xmlCleanupParser();
-       /* xmlFreeDoc(doctree);  -- will die at end of tuple anyway */
-
        xmlFree(xpresstr);
 
        elog_error("XPath error", false);
@@ -789,7 +767,6 @@ xpath_table(PG_FUNCTION_ARGS)
                                        comppath = xmlXPathCompile(xpaths[j]);
                                        if (comppath == NULL)
                                        {
-                                               xmlCleanupParser();
                                                xmlFreeDoc(doctree);
                                                elog_error("XPath Syntax Error", true);
                                        }
@@ -854,8 +831,6 @@ xpath_table(PG_FUNCTION_ARGS)
                        pfree(xmldoc);
        }
 
-       xmlCleanupParser();
-
        tuplestore_donestoring(tupstore);
 
        SPI_finish();
index a38ab5a7a8707a2c683281c996e1ba46007ce18c..4c45422b496e03604ea19f31a89d3a12e4e86cc7 100644 (file)
@@ -80,7 +80,6 @@ xslt_process(PG_FUNCTION_ARGS)
 
        if (doctree == NULL)
        {
-               xmlCleanupParser();
                elog_error("error parsing XML document", false);
 
                PG_RETURN_NULL();
@@ -94,7 +93,6 @@ xslt_process(PG_FUNCTION_ARGS)
                if (ssdoc == NULL)
                {
                        xmlFreeDoc(doctree);
-                       xmlCleanupParser();
                        elog_error("error parsing stylesheet as XML document", false);
                        PG_RETURN_NULL();
                }
@@ -109,7 +107,6 @@ xslt_process(PG_FUNCTION_ARGS)
        {
                xmlFreeDoc(doctree);
                xsltCleanupGlobals();
-               xmlCleanupParser();
                elog_error("failed to parse stylesheet", false);
                PG_RETURN_NULL();
        }
@@ -122,7 +119,6 @@ xslt_process(PG_FUNCTION_ARGS)
        xmlFreeDoc(doctree);
 
        xsltCleanupGlobals();
-       xmlCleanupParser();
 
        if (resstat < 0)
                PG_RETURN_NULL();