From df89409aba1346a85cf657691058a2d82d2cc7d4 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Fri, 29 Sep 2023 23:35:22 +0200 Subject: [PATCH] Fix compile error with -Werror=incompatible-function-pointer-types and old libxml2 libxml2 prior to 2.9.8 had a different signature for xmlHashScanner. This signature changed in https://github.com/GNOME/libxml2/commit/e03f0a199a67017b2f8052354cf732b2b4cae787 Use an #if to work around the incompatible signature. Closes GH-12326. --- NEWS | 4 ++++ ext/dom/dom_iterators.c | 1 + ext/libxml/libxml.c | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/NEWS b/NEWS index 395f5f687ef..a94dba55f9c 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,10 @@ PHP NEWS - DOM: . Restore old namespace reconciliation behaviour. (nielsdos) +- LibXML: + . Fix compile error with -Werror=incompatible-function-pointer-types and + old libxml2. (nielsdos) + - MySQLnd: . Fixed bug GH-12297 (PHP Startup: Invalid library (maybe not a PHP library) 'mysqlnd.so' in Unknown on line). (nielsdos) diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c index 2614eff85a0..21d59c5f02b 100644 --- a/ext/dom/dom_iterators.c +++ b/ext/dom/dom_iterators.c @@ -38,6 +38,7 @@ struct _notationIterator { xmlNotation *notation; }; +/* Function pointer typedef changed in 2.9.8, see https://github.com/GNOME/libxml2/commit/e03f0a199a67017b2f8052354cf732b2b4cae787 */ #if LIBXML_VERSION >= 20908 static void itemHashScanner (void *payload, void *data, const xmlChar *name) /* {{{ */ #else diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 6b9cd64c299..48b981a95a5 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -136,7 +136,12 @@ PHP_LIBXML_API void php_libxml_set_old_ns(xmlDocPtr doc, xmlNsPtr ns) php_libxml_set_old_ns_list(doc, ns, ns); } +/* Function pointer typedef changed in 2.9.8, see https://github.com/GNOME/libxml2/commit/e03f0a199a67017b2f8052354cf732b2b4cae787 */ +#if LIBXML_VERSION >= 20908 static void php_libxml_unlink_entity(void *data, void *table, const xmlChar *name) +#else +static void php_libxml_unlink_entity(void *data, void *table, xmlChar *name) +#endif { xmlEntityPtr entity = data; if (entity->_private != NULL) {