[Libreoffice-commits] libcdr.git: 3 commits - configure.ac src/lib
David Tardon
dtardon at redhat.com
Tue Jun 3 12:42:13 PDT 2014
configure.ac | 2 +-
src/lib/CDRContentCollector.cpp | 5 ++++-
src/lib/CDRParser.cpp | 8 ++++----
src/lib/CDRParser.h | 4 ++--
4 files changed, 11 insertions(+), 8 deletions(-)
New commits:
commit 6448d30053f59f1b71cd841629d053f6bf071d82
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jun 3 18:56:41 2014 +0200
coverity#1219654 avoid possible out-of-bounds access
Change-Id: I44de7037a9e3a65b539f452aace782683121ba83
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 853c5e0..70fa511 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -483,7 +483,7 @@ void libcdr::CDRParser::readWaldoLoda(librevenge::RVNGInputStream *input, unsign
input->seek(startPosition + length, librevenge::RVNG_SEEK_SET);
}
-bool libcdr::CDRParser::parseRecords(librevenge::RVNGInputStream *input, unsigned *blockLengths, unsigned level)
+bool libcdr::CDRParser::parseRecords(librevenge::RVNGInputStream *input, const std::vector<unsigned> &blockLengths, unsigned level)
{
if (!input)
{
@@ -498,7 +498,7 @@ bool libcdr::CDRParser::parseRecords(librevenge::RVNGInputStream *input, unsigne
return true;
}
-bool libcdr::CDRParser::parseRecord(librevenge::RVNGInputStream *input, unsigned *blockLengths, unsigned level)
+bool libcdr::CDRParser::parseRecord(librevenge::RVNGInputStream *input, const std::vector<unsigned> &blockLengths, unsigned level)
{
if (!input)
{
@@ -516,7 +516,7 @@ bool libcdr::CDRParser::parseRecord(librevenge::RVNGInputStream *input, unsigned
return true;
unsigned fourCC = readU32(input);
unsigned length = readU32(input);
- if (blockLengths)
+ if (blockLengths.size() > length)
length=blockLengths[length];
unsigned long position = input->tell();
unsigned listType(0);
@@ -576,7 +576,7 @@ bool libcdr::CDRParser::parseRecord(librevenge::RVNGInputStream *input, unsigned
CDRInternalStream tmpBlocksStream(input, blocksLength, compressed);
while (!tmpBlocksStream.isEnd())
tmpBlockLengths.push_back(readU32(&tmpBlocksStream));
- if (!parseRecords(&tmpStream, tmpBlockLengths.size() ? &tmpBlockLengths[0] : 0, level+1))
+ if (!parseRecords(&tmpStream, tmpBlockLengths, level+1))
return false;
}
}
diff --git a/src/lib/CDRParser.h b/src/lib/CDRParser.h
index d959507..31f7ec7 100644
--- a/src/lib/CDRParser.h
+++ b/src/lib/CDRParser.h
@@ -29,7 +29,7 @@ class CDRParser : protected CommonParser
public:
explicit CDRParser(const std::vector<librevenge::RVNGInputStream *> &externalStreams, CDRCollector *collector);
virtual ~CDRParser();
- bool parseRecords(librevenge::RVNGInputStream *input, unsigned *blockLengths = 0, unsigned level = 0);
+ bool parseRecords(librevenge::RVNGInputStream *input, const std::vector<unsigned> &blockLengths = std::vector<unsigned>(), unsigned level = 0);
bool parseWaldo(librevenge::RVNGInputStream *input);
private:
@@ -44,7 +44,7 @@ private:
std::map<unsigned, WaldoRecordInfo> &records6, std::map<unsigned, WaldoRecordInfo> &records7,
std::map<unsigned, WaldoRecordInfo> &records8, std::map<unsigned, WaldoRecordInfo> recordsOther);
void readWaldoRecord(librevenge::RVNGInputStream *input, const WaldoRecordInfo &info);
- bool parseRecord(librevenge::RVNGInputStream *input, unsigned *blockLengths = 0, unsigned level = 0);
+ bool parseRecord(librevenge::RVNGInputStream *input, const std::vector<unsigned> &blockLengths = std::vector<unsigned>(), unsigned level = 0);
void readRecord(unsigned fourCC, unsigned length, librevenge::RVNGInputStream *input);
double readRectCoord(librevenge::RVNGInputStream *input);
CDRColor readColor(librevenge::RVNGInputStream *input);
commit b29f874bb1e8c15b2c77e094d4431a59662e0283
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jun 3 18:42:16 2014 +0200
coverity#1219811 dereference null return value
Change-Id: I2cff394e32ce6bc7bf39fae09d91a9730ad8f656
diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index 5c4ea97..af26ad7 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -1186,6 +1186,9 @@ void libcdr::CDRContentCollector::collectSpnd(unsigned spnd)
void libcdr::CDRContentCollector::collectVectorPattern(unsigned id, const librevenge::RVNGBinaryData &data)
{
librevenge::RVNGInputStream *input = data.getDataStream();
+ if (!input)
+ return;
+
input->seek(0, librevenge::RVNG_SEEK_SET);
if (!libcdr::CMXDocument::isSupported(input))
return;
commit f8c8a0d09c0614d7b0794b09b5d3fcaba84294b1
Author: David Tardon <dtardon at redhat.com>
Date: Tue Jun 3 18:39:53 2014 +0200
the const_cast is no longer necessary
Change-Id: I802fd594660761e5ee112fa096f6f4c8fcc97cbb
diff --git a/configure.ac b/configure.ac
index ec7cd3a..a216684 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,7 +39,7 @@ PKG_PROG_PKG_CONFIG([0.20])
# Find librevenge
# ===============
PKG_CHECK_MODULES([REVENGE],[
- librevenge-0.0
+ librevenge-0.0 >= 0.0.1
])
AC_SUBST([REVENGE_CFLAGS])
AC_SUBST([REVENGE_LIBS])
diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index c199aed..5c4ea97 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -1185,7 +1185,7 @@ void libcdr::CDRContentCollector::collectSpnd(unsigned spnd)
void libcdr::CDRContentCollector::collectVectorPattern(unsigned id, const librevenge::RVNGBinaryData &data)
{
- librevenge::RVNGInputStream *input = const_cast<librevenge::RVNGInputStream *>(data.getDataStream());
+ librevenge::RVNGInputStream *input = data.getDataStream();
input->seek(0, librevenge::RVNG_SEEK_SET);
if (!libcdr::CMXDocument::isSupported(input))
return;
More information about the Libreoffice-commits
mailing list