mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Back-patch today's memory management fixups in contrib/xml2.
Prior to 8.3, these changes are not critical for compatibility with core Postgres, since core had no libxml2 calls then. However there is still a risk if contrib/xml2 is used along with libxml2 functionality in Perl or other loadable modules. So back-patch to all versions. Also back-patch addition of regression tests. I'm not sure how many of the cases are interesting without the interaction with core xml code, but a silly regression test is still better than none at all.
This commit is contained in:
@ -21,22 +21,21 @@
|
||||
#include <libxslt/xsltutils.h>
|
||||
|
||||
|
||||
/* externally accessible functions */
|
||||
|
||||
Datum xslt_process(PG_FUNCTION_ARGS);
|
||||
|
||||
/* declarations to come from xpath.c */
|
||||
|
||||
extern void elog_error(int level, char *explain, int force);
|
||||
extern void pgxml_parser_init();
|
||||
extern xmlChar *pgxml_texttoxmlchar(text *textstring);
|
||||
|
||||
#define GET_STR(textp) DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(textp)))
|
||||
extern void elog_error(const char *explain, bool force);
|
||||
extern void pgxml_parser_init(void);
|
||||
|
||||
/* local defs */
|
||||
static void parse_params(const char **params, text *paramstr);
|
||||
|
||||
Datum xslt_process(PG_FUNCTION_ARGS);
|
||||
|
||||
|
||||
#define MAXPARAMS 20 /* must be even, see parse_params() */
|
||||
|
||||
#define GET_STR(textp) DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(textp)))
|
||||
|
||||
|
||||
PG_FUNCTION_INFO_V1(xslt_process);
|
||||
|
||||
@ -82,7 +81,7 @@ xslt_process(PG_FUNCTION_ARGS)
|
||||
if (doctree == NULL)
|
||||
{
|
||||
xmlCleanupParser();
|
||||
elog_error(ERROR, "Error parsing XML document", 0);
|
||||
elog_error("Error parsing XML document", false);
|
||||
|
||||
PG_RETURN_NULL();
|
||||
}
|
||||
@ -96,7 +95,7 @@ xslt_process(PG_FUNCTION_ARGS)
|
||||
{
|
||||
xmlFreeDoc(doctree);
|
||||
xmlCleanupParser();
|
||||
elog_error(ERROR, "Error parsing stylesheet as XML document", 0);
|
||||
elog_error("Error parsing stylesheet as XML document", false);
|
||||
PG_RETURN_NULL();
|
||||
}
|
||||
|
||||
@ -111,7 +110,7 @@ xslt_process(PG_FUNCTION_ARGS)
|
||||
xmlFreeDoc(doctree);
|
||||
xsltCleanupGlobals();
|
||||
xmlCleanupParser();
|
||||
elog_error(ERROR, "Failed to parse stylesheet", 0);
|
||||
elog_error("Failed to parse stylesheet", false);
|
||||
PG_RETURN_NULL();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user