[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