fix: usr: Disable own memory context for libxml2 on macOS

Apple broke custom memory allocation functions in the system-wide libxml2 starting with macOS Sequoia 15.4.  Usage of the custom memory allocation functions has been disabled on macOS.

Closes #5268

Merge branch '5268-disable-libxml2-memory-management-on-macos' into 'main'

See merge request isc-projects/bind9!10374
This commit is contained in:
Ondřej Surý 2025-04-18 18:50:18 +00:00
commit 6f3fea837f

View file

@ -19,6 +19,7 @@
#include <libxml/parser.h>
#include <libxml/xmlversion.h>
#ifndef LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS
static isc_mem_t *isc__xml_mctx = NULL;
static void *
@ -44,17 +45,20 @@ isc__xml_free(void *ptr) {
isc_mem_free(isc__xml_mctx, ptr);
}
#endif /* !LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS) */
#endif /* HAVE_LIBXML2 */
void
isc__xml_initialize(void) {
#ifdef HAVE_LIBXML2
#ifndef LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS
isc_mem_create(&isc__xml_mctx);
isc_mem_setname(isc__xml_mctx, "libxml2");
isc_mem_setdestroycheck(isc__xml_mctx, false);
RUNTIME_CHECK(xmlMemSetup(isc__xml_free, isc__xml_malloc,
isc__xml_realloc, isc__xml_strdup) == 0);
#endif /* !LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS */
xmlInitParser();
#endif /* HAVE_LIBXML2 */
@ -64,15 +68,18 @@ void
isc__xml_shutdown(void) {
#ifdef HAVE_LIBXML2
xmlCleanupParser();
#ifndef LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS
isc_mem_detach(&isc__xml_mctx);
#endif /* !LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS */
#endif /* HAVE_LIBXML2 */
}
void
isc__xml_setdestroycheck(bool check) {
#if HAVE_LIBXML2
isc__xml_setdestroycheck(bool check ISC_ATTR_UNUSED) {
#ifdef HAVE_LIBXML2
#ifndef LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS
isc_mem_setdestroycheck(isc__xml_mctx, check);
#else
UNUSED(check);
#endif
#endif /* LIBXML_HAS_DEPRECATED_MEMORY_ALLOCATION_FUNCTIONS */
#endif /* HAVE_LIBXML2 */
}