diff options
author | Robin Gareus <robin@gareus.org> | 2015-10-07 14:36:32 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-10-07 14:36:32 +0200 |
commit | 14932d1b860cc59d51054b8db0b9756cb74bc7dd (patch) | |
tree | e960a19c4130a31660d383ed2410256650d194f0 | |
parent | e79b2e376f87bb0c3f5f5337fcb4ed9cba28a2c0 (diff) |
allow to load huge VST plugin states -fixes #6623
by default libxml has a XML_MAX_TEXT_LENGTH of 10M
with base64 encoding that allows at most 2.5MB state.
set XML_PARSE_HUGE to read large sessions
-rw-r--r-- | libs/pbd/xml++.cc | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc index 4e566a7800..963531c5f5 100644 --- a/libs/pbd/xml++.cc +++ b/libs/pbd/xml++.cc @@ -82,26 +82,23 @@ XMLTree::read_internal(bool validate) _doc = 0; } - xmlParserCtxtPtr ctxt = NULL; /* the parser context */ + /* create a parser context */ + xmlParserCtxtPtr ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + return false; + } xmlKeepBlanksDefault(0); /* parse the file, activating the DTD validation option */ if (validate) { - /* create a parser context */ - ctxt = xmlNewParserCtxt(); - if (ctxt == NULL) { - return false; - } _doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_DTDVALID); } else { - _doc = xmlParseFile(_filename.c_str()); + _doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_HUGE); } /* check if parsing suceeded */ if (_doc == NULL) { - if (validate) { - xmlFreeParserCtxt(ctxt); - } + xmlFreeParserCtxt(ctxt); return false; } else { /* check if validation suceeded */ @@ -114,9 +111,7 @@ XMLTree::read_internal(bool validate) _root = readnode(xmlDocGetRootElement(_doc)); /* free up the parser context */ - if (validate) { - xmlFreeParserCtxt(ctxt); - } + xmlFreeParserCtxt(ctxt); return true; } |