From 87cba401a48feff7e547f59fb7ead1a1ab99042a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 6 Dec 2002 03:44:14 +0000 Subject: [PATCH] Some time ago John Gray 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 --- contrib/xml/pgxml_dom.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contrib/xml/pgxml_dom.c b/contrib/xml/pgxml_dom.c index 0c22aced065..f79183824eb 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); }