PG versus libxml2 2.12.x - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | PG versus libxml2 2.12.x |
Date | |
Msg-id | 1389505.1706382262@sss.pgh.pa.us Whole thread Raw |
Responses |
Re: PG versus libxml2 2.12.x
Re: PG versus libxml2 2.12.x |
List | pgsql-hackers |
Buildfarm member caiman has been failing build for a couple weeks now. The reason turns out to be that recent libxml2 has decided to throw a "const" into the signature required for custom error handlers. (API compatibility? What's that?) I don't mind adopting the "const" --- it's a good idea in isolation. The trouble is in fixing our code to work with both old and new libxml2 versions. We could thrash around with a configure test or something, but I think the most expedient answer is just to insert some explicit casts, as shown in the attached. It's possible though that some compilers will throw a cast-away-const warning. I'm not seeing any, but ... Also, I'm seeing a deprecation warning in contrib/xml2/xpath.c for xmlLoadExtDtdDefaultValue = 1; I'm not sure why that's still there, given that we disabled external DTD access ages ago. I propose we just remove it. In short, I suggest the attached. regards, tom lane diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index a967257546..b999b1f706 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -74,8 +74,6 @@ pgxml_parser_init(PgXmlStrictness strictness) /* Initialize libxml */ xmlInitParser(); - xmlLoadExtDtdDefaultValue = 1; - return xmlerrcxt; } diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index f869c680af..a6734f3550 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -124,7 +124,7 @@ static xmlParserInputPtr xmlPgEntityLoader(const char *URL, const char *ID, xmlParserCtxtPtr ctxt); static void xml_errsave(Node *escontext, PgXmlErrorContext *errcxt, int sqlcode, const char *msg); -static void xml_errorHandler(void *data, xmlErrorPtr error); +static void xml_errorHandler(void *data, const xmlError *error); static int errdetail_for_xml_code(int code); static void chopStringInfoNewlines(StringInfo str); static void appendStringInfoLineSeparator(StringInfo str); @@ -1196,7 +1196,8 @@ pg_xml_init(PgXmlStrictness strictness) errcxt->saved_errcxt = xmlGenericErrorContext; #endif - xmlSetStructuredErrorFunc((void *) errcxt, xml_errorHandler); + xmlSetStructuredErrorFunc((void *) errcxt, + (xmlStructuredErrorFunc) xml_errorHandler); /* * Verify that xmlSetStructuredErrorFunc set the context variable we @@ -2024,7 +2025,7 @@ xml_errsave(Node *escontext, PgXmlErrorContext *errcxt, * Error handler for libxml errors and warnings */ static void -xml_errorHandler(void *data, xmlErrorPtr error) +xml_errorHandler(void *data, const xmlError *error) { PgXmlErrorContext *xmlerrcxt = (PgXmlErrorContext *) data; xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) error->ctxt; @@ -4803,7 +4804,8 @@ XmlTableFetchRow(TableFuncScanState *state) xtCxt = GetXmlTableBuilderPrivateData(state, "XmlTableFetchRow"); /* Propagate our own error context to libxml2 */ - xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, xml_errorHandler); + xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, + (xmlStructuredErrorFunc) xml_errorHandler); if (xtCxt->xpathobj == NULL) { @@ -4857,7 +4859,8 @@ XmlTableGetValue(TableFuncScanState *state, int colnum, xtCxt->xpathobj->nodesetval != NULL); /* Propagate our own error context to libxml2 */ - xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, xml_errorHandler); + xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, + (xmlStructuredErrorFunc) xml_errorHandler); *isnull = false; @@ -5000,7 +5003,8 @@ XmlTableDestroyOpaque(TableFuncScanState *state) xtCxt = GetXmlTableBuilderPrivateData(state, "XmlTableDestroyOpaque"); /* Propagate our own error context to libxml2 */ - xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, xml_errorHandler); + xmlSetStructuredErrorFunc((void *) xtCxt->xmlerrcxt, + (xmlStructuredErrorFunc) xml_errorHandler); if (xtCxt->xpathscomp != NULL) {
pgsql-hackers by date: