[Libreoffice-commits] libvisio.git: 2 commits - src/lib
David Tardon
dtardon at redhat.com
Sat May 4 07:41:14 PDT 2013
src/lib/VDXParser.cpp | 9 +++++----
src/lib/VSDParser.cpp | 2 +-
src/lib/VSDXParser.cpp | 4 ++--
3 files changed, 8 insertions(+), 7 deletions(-)
New commits:
commit 46a3a1b132333a19855b088129a79c29fc869f73
Author: David Tardon <dtardon at redhat.com>
Date: Sat May 4 16:33:52 2013 +0200
coverity: make the loop end correctly
The original condition, for a simple NURBS block, would try to read
knots as long as there were anything to read. Because in that case flag
equals 0, which is different from 0x8a, so the loop would be taken again
and again, regardless of the value of repetitions.
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 0f0a7d2..e9c9009 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1228,7 +1228,7 @@ void libvisio::VSDParser::readNURBSTo(WPXInputStream *input)
unsigned long bytesRead = input->tell() - inputPos;
unsigned char flag = 0;
if (paramType != 0x8a) flag = readU8(input);
- while ((flag != 0x81 || (paramType == 0x8a && repetitions > 0)) && bytesRead < length)
+ while ((paramType == 0x8a ? repetitions > 0 : flag != 0x81) && bytesRead < length)
{
inputPos = input->tell();
double knot_ = 0;
commit a68b8b3557527941cf6d239295834a99bca7afa5
Author: David Tardon <dtardon at redhat.com>
Date: Sat May 4 16:18:01 2013 +0200
coverity: check return value of xmlTextReaderRead
diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index e85f9a9..649cd81 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -212,9 +212,10 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr reader)
case XML_SOLUTIONXML:
if (XML_READER_TYPE_ELEMENT == tokenType)
{
+ int ret = 0;
do
{
- xmlTextReaderRead(reader);
+ ret = xmlTextReaderRead(reader);
#if 0
// SolutionXML inside VDX file can have invalid namespace URIs
xmlResetLastError();
@@ -222,7 +223,7 @@ void libvisio::VDXParser::processXmlNode(xmlTextReaderPtr reader)
tokenId = getElementToken(reader);
tokenType = xmlTextReaderNodeType(reader);
}
- while (XML_SOLUTIONXML != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType);
+ while ((XML_SOLUTIONXML != tokenId || XML_READER_TYPE_END_ELEMENT != tokenType) && 1 == ret);
}
break;
case XML_STYLESHEET:
@@ -847,8 +848,8 @@ int libvisio::VDXParser::getElementDepth(xmlTextReaderPtr reader)
void libvisio::VDXParser::getBinaryData(xmlTextReaderPtr reader)
{
- xmlTextReaderRead(reader);
- if (XML_READER_TYPE_TEXT == xmlTextReaderNodeType(reader))
+ const int ret = xmlTextReaderRead(reader);
+ if (1 == ret && XML_READER_TYPE_TEXT == xmlTextReaderNodeType(reader))
{
const xmlChar *data = xmlTextReaderConstValue(reader);
if (data)
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index d067d21..ad93585 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -1242,12 +1242,12 @@ void libvisio::VSDXParser::readCharacter(xmlTextReaderPtr reader)
void libvisio::VSDXParser::getBinaryData(xmlTextReaderPtr reader)
{
- xmlTextReaderRead(reader);
+ const int ret = xmlTextReaderRead(reader);
int tokenId = VSDXMLTokenMap::getTokenId(xmlTextReaderConstName(reader));
int tokenType = xmlTextReaderNodeType(reader);
m_currentBinaryData.clear();
- if (XML_REL == tokenId && XML_READER_TYPE_ELEMENT == tokenType)
+ if (1 == ret && XML_REL == tokenId && XML_READER_TYPE_ELEMENT == tokenType)
{
xmlChar *id = xmlTextReaderGetAttribute(reader, BAD_CAST("r:id"));
if (id)
More information about the Libreoffice-commits
mailing list