summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2002-12-06 03:44:14 +0000
committerBruce Momjian2002-12-06 03:44:14 +0000
commit8314213b04ad4e6922d40c32dfe703a183140d68 (patch)
tree7e240620ee9ae30deec204acd7eb5ff54c3f7e23
parentd7d7965106e6d5b7e50769f6050c235c62159a7c (diff)
Some time ago John Gray <[email protected]> and myself worked out and
tested a patch to contrib/xml where the existing code was causing postgres to crash when it encountered & entities in the XML. I've enclosed a patch that John came up with to correct this problem. It patches against 7.3 and will apply on 7.2x if the elog WARNING calls are changed to elog NOTICE. Michael Richards
-rw-r--r--contrib/xml/pgxml_dom.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/contrib/xml/pgxml_dom.c b/contrib/xml/pgxml_dom.c
index 0c22aced06..f79183824e 100644
--- a/contrib/xml/pgxml_dom.c
+++ b/contrib/xml/pgxml_dom.c
@@ -87,10 +87,10 @@ pgxml_parse(PG_FUNCTION_ARGS)
doctree = xmlParseMemory((char *) VARDATA(t), docsize);
if (doctree == NULL)
{
- /* xmlCleanupParser(); */
+ xmlCleanupParser();
PG_RETURN_BOOL(false); /* i.e. not well-formed */
}
- /* xmlCleanupParser(); */
+ xmlCleanupParser();
xmlFreeDoc(doctree);
PG_RETURN_BOOL(true);
}
@@ -202,7 +202,8 @@ pgxml_xpath(PG_FUNCTION_ARGS)
doctree = xmlParseMemory((char *) VARDATA(t), docsize);
if (doctree == NULL)
- { /* not well-formed */
+ { /* not well-formed */
+ xmlCleanupParser();
PG_RETURN_NULL();
}
@@ -216,6 +217,7 @@ pgxml_xpath(PG_FUNCTION_ARGS)
elog(WARNING, "XPath syntax error");
xmlFreeDoc(doctree);
pfree((void *) xpath);
+ xmlCleanupParser();
PG_RETURN_NULL();
}
@@ -227,6 +229,7 @@ pgxml_xpath(PG_FUNCTION_ARGS)
{
xmlFreeDoc(doctree);
pfree((void *) xpath);
+ xmlCleanupParser();
PG_RETURN_NULL(); /* seems appropriate */
}
/* now we dump this node, ?surrounding by tags? */
@@ -257,6 +260,6 @@ pgxml_xpath(PG_FUNCTION_ARGS)
xmlFreeDoc(doctree);
pfree((void *) xpath);
xmlFree(xpresstr);
-
+ xmlCleanupParser();
PG_RETURN_TEXT_P(xpres);
}