[Libreoffice-commits] libvisio.git: 2 commits - src/lib src/test
David Tardon
dtardon at redhat.com
Tue Jul 21 09:07:41 PDT 2015
src/lib/VSD5Parser.cpp | 16 ++++++++++++----
src/test/importtest.cpp | 2 +-
2 files changed, 13 insertions(+), 5 deletions(-)
New commits:
commit 77a88f128700e434c093eb53590be63022edbdea
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jul 21 17:35:13 2015 +0200
avoid overflows when reading chunk records
Change-Id: Iea13e63e977348a449b68eca329146ae6f097197
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 00cbf06..79b638b 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -102,7 +102,12 @@ void libvisio::VSD5Parser::handleChunkRecords(librevenge::RVNGInputStream *input
long endPosition = input->tell() + m_header.dataLength;
input->seek(endPosition - 4, librevenge::RVNG_SEEK_SET);
unsigned numRecords = readU16(input);
+ const long headerPosition = endPosition - 4 * (numRecords + 1);
+ if (headerPosition <= startPosition) // no records to read
+ return;
unsigned endOffset = readU16(input);
+ if (long(endOffset) > (headerPosition - startPosition))
+ endOffset = unsigned(headerPosition - startPosition); // try to read something anyway
std::map<unsigned, ChunkHeader> records;
input->seek(endPosition-4*(numRecords+1), librevenge::RVNG_SEEK_SET);
unsigned i = 0;
@@ -114,10 +119,13 @@ void libvisio::VSD5Parser::handleChunkRecords(librevenge::RVNGInputStream *input
unsigned tmpStart = offset;
while (tmpStart % 4)
tmpStart++;
- header.dataLength = endOffset - tmpStart;
- header.level = m_header.level + 1;
- records[tmpStart] = header;
- endOffset = offset;
+ if (tmpStart < endOffset)
+ {
+ header.dataLength = endOffset - tmpStart;
+ header.level = m_header.level + 1;
+ records[tmpStart] = header;
+ endOffset = offset;
+ }
}
i = 0;
for (std::map<unsigned, ChunkHeader>::iterator iter = records.begin(); iter != records.end(); ++iter)
commit 2bdd7a9bfd1ed1606b7348602196f0a2baf0c099
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jul 21 17:35:19 2015 +0200
astyle
Change-Id: I51eebdceb176ae9ded9860010a6b691d0af4cf95
diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index 705a8c7..c09bfd8 100644
--- a/src/test/importtest.cpp
+++ b/src/test/importtest.cpp
@@ -85,7 +85,7 @@ void assertXPathNoAttribute(xmlDocPtr doc, const librevenge::RVNGString &xpath,
message2.append("' unexpected '");
message2.append(attribute);
message2.append("' attribute");
- CPPUNIT_ASSERT_EQUAL_MESSAGE(message2.cstr(), static_cast<xmlChar*>(0), xmlGetProp(node, BAD_CAST(attribute.cstr())));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(message2.cstr(), static_cast<xmlChar *>(0), xmlGetProp(node, BAD_CAST(attribute.cstr())));
xmlXPathFreeObject(xpathobject);
}
More information about the Libreoffice-commits
mailing list