[Libreoffice-commits] libvisio.git: 2 commits - src/lib
Fridrich Štrba
fridrich.strba at bluewin.ch
Mon Dec 21 00:32:00 PST 2015
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.strba at 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.strba at 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);
More information about the Libreoffice-commits
mailing list