src/lib/VDXParser.cpp | 2 +- src/lib/VSDXMLParserBase.cpp | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-)
New commits: commit e1116a4cfb515b177e7b7203c0f8307431518c49 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Mon Dec 21 09:31:05 2015 +0100 Some protection against non-empty pp cp and tp + special value of bulletStr Change-Id: Ifb8a8d287ed0e638c36a483b397f336841439036 diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp index ad7300d..fa375c2 100644 --- a/src/lib/VSDXMLParserBase.cpp +++ b/src/lib/VSDXMLParserBase.cpp @@ -1105,13 +1105,16 @@ void libvisio::VSDXMLParserBase::readText(xmlTextReaderPtr reader) switch (tokenId) { case XML_CP: - cp = getIX(reader); + if (XML_READER_TYPE_ELEMENT == tokenType) + cp = getIX(reader); break; case XML_PP: - pp = getIX(reader); + if (XML_READER_TYPE_ELEMENT == tokenType) + pp = getIX(reader); break; case XML_TP: - tp = getIX(reader); + if (XML_READER_TYPE_ELEMENT == tokenType) + tp = getIX(reader); break; default: if (XML_READER_TYPE_TEXT == tokenType || XML_READER_TYPE_SIGNIFICANT_WHITESPACE == tokenType) @@ -1471,12 +1474,16 @@ void libvisio::VSDXMLParserBase::readParaIX(xmlTextReaderPtr reader) readByteData(bullet, reader); break; case XML_BULLETSTR: - if (XML_READER_TYPE_ELEMENT == tokenType) + if (XML_READER_TYPE_ELEMENT == tokenType && !xmlTextReaderIsEmptyElement(reader)) { const shared_ptr<xmlChar> stringValue(readStringData(reader), xmlFree); if (stringValue && !xmlStrEqual(stringValue.get(), BAD_CAST("Themed"))) { - bulletStr = VSDName(librevenge::RVNGBinaryData(stringValue.get(), xmlStrlen(stringValue.get())), VSD_TEXT_UTF8); + unsigned length = xmlStrlen(stringValue.get()); + const xmlChar *strV = stringValue.get(); + // The character U+E000 is considered as empty string in VDX produced by Visio 2002 + if (3 != length || 0xee != strV[0] || 0x80 != strV[1] || 0x80 != strV[2]) + bulletStr = VSDName(librevenge::RVNGBinaryData(stringValue.get(), xmlStrlen(stringValue.get())), VSD_TEXT_UTF8); } } break; commit 46d75c2b3a02873097e3e64eb42c99422eda29d6 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Mon Dec 21 09:29:27 2015 +0100 Masters might be an empty element Change-Id: I5035d759582e5862b7e4d07fe8b854ba07108197 diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp index cc59b8b..973e464 100644 --- a/src/lib/VDXParser.cpp +++ b/src/lib/VDXParser.cpp @@ -123,7 +123,7 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr reader) handleMasterEnd(reader); break; case XML_MASTERS: - if (XML_READER_TYPE_ELEMENT == tokenType) + if (XML_READER_TYPE_ELEMENT == tokenType && !xmlTextReaderIsEmptyElement(reader)) handleMastersStart(reader); else if (XML_READER_TYPE_END_ELEMENT == tokenType) handleMastersEnd(reader);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits