Remove xmlCleanupParser calls from contrib/xml2.

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.
This commit is contained in:
Tom Lane 2010-03-01 05:17:08 +00:00
parent 5cdd478bd0
commit 8a37a0341e
2 changed files with 4 additions and 33 deletions

View File

@ -139,12 +139,8 @@ xml_valid(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);
}
@ -301,7 +297,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)
@ -336,7 +331,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)
@ -375,7 +369,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)
@ -407,13 +400,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();
@ -444,13 +434,10 @@ xpath_bool(PG_FUNCTION_ARGS)
pfree(xpath);
if (res == NULL)
{
xmlCleanupParser();
PG_RETURN_BOOL(false);
}
bRes = xmlXPathCastToBoolean(res);
xmlCleanupParser();
PG_RETURN_BOOL(bRes);
}
@ -473,9 +460,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);
@ -484,7 +469,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
comppath = xmlXPathCompile(xpath);
if (comppath == NULL)
{
xmlCleanupParser();
xmlFreeDoc(doctree);
elog_error("XPath Syntax Error", true);
}
@ -496,7 +480,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
if (res == NULL)
{
xmlXPathFreeContext(ctxt);
/* xmlCleanupParser(); */
xmlFreeDoc(doctree);
return NULL;
@ -516,10 +499,8 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
text *xpres;
if (res == NULL)
{
xmlCleanupParser();
return NULL;
}
switch (res->type)
{
case XPATH_NODESET:
@ -544,9 +525,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);
@ -785,7 +763,6 @@ xpath_table(PG_FUNCTION_ARGS)
comppath = xmlXPathCompile(xpaths[j]);
if (comppath == NULL)
{
xmlCleanupParser();
xmlFreeDoc(doctree);
elog_error("XPath Syntax Error", true);
}
@ -852,8 +829,6 @@ xpath_table(PG_FUNCTION_ARGS)
pfree(xmldoc);
}
xmlCleanupParser();
tuplestore_donestoring(tupstore);
SPI_finish();

View 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();