From df3a4ed9c61d7e51db9f7cde5675ad8d4590135a Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 5 Jan 2020 17:49:35 -0700 Subject: [PATCH] move call to xmlKeepBlanksDefault(0) to before the creation of an XML parser context the value is used by the parser context; the old code called it only after the *first* parser context was created. therefore the first XMLTree::read() call has its behavior determined by libxml2's default for this value, rather than by our explicit choice (do not treat whitespace as a note). All subequent read() calls will use our value. This variable inside libxml2 is actually per-thread, which just increases the stakes for calling xmlKeepBlanksDefault() at the right time --- libs/pbd/xml++.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc index 95fb370b04..598a7684b3 100644 --- a/libs/pbd/xml++.cc +++ b/libs/pbd/xml++.cc @@ -85,13 +85,17 @@ XMLTree::read_internal(bool validate) _doc = 0; } + /* Calling this prevents libxml2 from treating whitespace as active + nodes. It needs to be called before we create a parser context. + */ + xmlKeepBlanksDefault(0); + /* create a parser context */ xmlParserCtxtPtr ctxt = xmlNewParserCtxt(); if (ctxt == NULL) { return false; } - xmlKeepBlanksDefault(0); /* parse the file, activating the DTD validation option */ if (validate) { _doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_DTDVALID);