summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2010-03-01 05:16:35 +0000
committerTom Lane2010-03-01 05:16:35 +0000
commita102090995858cdd324b1afe81f2f7735ef7f3a1 (patch)
tree685560e1b9088e6eff0475326ca01d4f0f4c9d7b
parent73632828aca2d252b4ea14706da6d2514c2750f1 (diff)
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.
-rw-r--r--contrib/xml2/xpath.c35
-rw-r--r--contrib/xml2/xslt_proc.c6
2 files changed, 6 insertions, 35 deletions
diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c
index 8e289bdc49..1ce031fa37 100644
--- a/contrib/xml2/xpath.c
+++ b/contrib/xml2/xpath.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/xml2/xpath.c,v 1.27 2010/02/28 21:31:57 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/xml2/xpath.c,v 1.28 2010/03/01 05:16:35 tgl Exp $
*
* Parser interface for DOM-based parser (libxml) rather than
* stream-based SAX-type parser
@@ -145,12 +145,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);
}
@@ -297,7 +293,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)
@@ -332,7 +327,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)
@@ -371,7 +365,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)
@@ -403,13 +396,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();
@@ -440,13 +430,10 @@ xpath_bool(PG_FUNCTION_ARGS)
pfree(xpath);
if (res == NULL)
- {
- xmlCleanupParser();
PG_RETURN_BOOL(false);
- }
bRes = xmlXPathCastToBoolean(res);
- xmlCleanupParser();
+
PG_RETURN_BOOL(bRes);
}
@@ -469,9 +456,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);
@@ -480,7 +465,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
comppath = xmlXPathCompile(xpath);
if (comppath == NULL)
{
- xmlCleanupParser();
xmlFreeDoc(doctree);
elog_error("XPath Syntax Error", true);
}
@@ -492,7 +476,6 @@ pgxml_xpath(text *document, xmlChar *xpath)
if (res == NULL)
{
xmlXPathFreeContext(ctxt);
- /* xmlCleanupParser(); */
xmlFreeDoc(doctree);
return NULL;
@@ -511,10 +494,8 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
text *xpres;
if (res == NULL)
- {
- xmlCleanupParser();
return NULL;
- }
+
switch (res->type)
{
case XPATH_NODESET:
@@ -536,9 +517,6 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
xpres = cstring_to_text((char *) xpresstr);
/* Free various storage */
- xmlCleanupParser();
- /* xmlFreeDoc(doctree); -- will die at end of tuple anyway */
-
xmlFree(xpresstr);
elog_error("XPath error", false);
@@ -779,7 +757,6 @@ xpath_table(PG_FUNCTION_ARGS)
comppath = xmlXPathCompile(xpaths[j]);
if (comppath == NULL)
{
- xmlCleanupParser();
xmlFreeDoc(doctree);
elog_error("XPath Syntax Error", true);
}
@@ -844,8 +821,6 @@ xpath_table(PG_FUNCTION_ARGS)
pfree(xmldoc);
}
- xmlCleanupParser();
-
tuplestore_donestoring(tupstore);
SPI_finish();
diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c
index ddf90f9c71..4265a56116 100644
--- a/contrib/xml2/xslt_proc.c
+++ b/contrib/xml2/xslt_proc.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.17 2010/02/28 19:51:37 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.18 2010/03/01 05:16:35 tgl Exp $
*
* XSLT processing functions (requiring libxslt)
*
@@ -79,7 +79,6 @@ xslt_process(PG_FUNCTION_ARGS)
if (doctree == NULL)
{
- xmlCleanupParser();
elog_error("error parsing XML document", false);
PG_RETURN_NULL();
@@ -93,7 +92,6 @@ xslt_process(PG_FUNCTION_ARGS)
if (ssdoc == NULL)
{
xmlFreeDoc(doctree);
- xmlCleanupParser();
elog_error("error parsing stylesheet as XML document", false);
PG_RETURN_NULL();
}
@@ -108,7 +106,6 @@ xslt_process(PG_FUNCTION_ARGS)
{
xmlFreeDoc(doctree);
xsltCleanupGlobals();
- xmlCleanupParser();
elog_error("failed to parse stylesheet", false);
PG_RETURN_NULL();
}
@@ -121,7 +118,6 @@ xslt_process(PG_FUNCTION_ARGS)
xmlFreeDoc(doctree);
xsltCleanupGlobals();
- xmlCleanupParser();
if (resstat < 0)
PG_RETURN_NULL();