move call to xmlKeepBlanksDefault(0) to before the creation of an XML parser context
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 6 Jan 2020 00:49:35 +0000 (17:49 -0700)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 6 Jan 2020 00:58:54 +0000 (17:58 -0700)
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

index 95fb370b04e32a51acb17baa4189450ee4b4ae9f..598a7684b3ee0ad52e813729fc7d05055cb10814 100644 (file)
@@ -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);