[Libreoffice-commits] libcdr.git: 5 commits - src/lib

David Tardon dtardon at redhat.com
Thu Nov 20 07:46:45 PST 2014


 src/lib/CDRDocument.cpp        |    6 ++++++
 src/lib/CDRInternalStream.cpp  |    3 +++
 src/lib/CDRParser.cpp          |    2 ++
 src/lib/CDRStylesCollector.cpp |    4 +++-
 src/lib/CMXDocument.cpp        |    6 ++++++
 5 files changed, 20 insertions(+), 1 deletion(-)

New commits:
commit 983bc0a2e969b011760956d739260a181001a855
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Nov 20 16:31:17 2014 +0100

    deinit z_stream properly if reading from input fails
    
    Change-Id: I5a2ce38daf8f251029ccf8c1458025f950fe2af2

diff --git a/src/lib/CDRInternalStream.cpp b/src/lib/CDRInternalStream.cpp
index cdef100..11ecb0f 100644
--- a/src/lib/CDRInternalStream.cpp
+++ b/src/lib/CDRInternalStream.cpp
@@ -61,7 +61,10 @@ libcdr::CDRInternalStream::CDRInternalStream(librevenge::RVNGInputStream *input,
     const unsigned char *tmpBuffer = input->read(size, tmpNumBytesRead);
 
     if (size != tmpNumBytesRead)
+    {
+      (void)inflateEnd(&strm);
       return;
+    }
 
     strm.avail_in = (uInt)tmpNumBytesRead;
     strm.next_in = (Bytef *)tmpBuffer;
commit 1d605d21e7b5f87c1ad18ff2e7dc03a092a6e557
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Nov 20 16:15:49 2014 +0100

    avoid out-of-bounds read
    
    Change-Id: I6b43ce6e7160789bdd99aabf8632bfc3431d4b7d

diff --git a/src/lib/CDRStylesCollector.cpp b/src/lib/CDRStylesCollector.cpp
index f6aa912..7ead9b1 100644
--- a/src/lib/CDRStylesCollector.cpp
+++ b/src/lib/CDRStylesCollector.cpp
@@ -113,6 +113,8 @@ void libcdr::CDRStylesCollector::collectBmp(unsigned imageId, unsigned colorMode
       while (i < lineWidth && i < width)
       {
         unsigned char c = bitmap[j*lineWidth+i];
+        if (c >= palette.size())
+          c = palette.size() - 1;
         i++;
         writeU32(image, m_ps.getBMPColor(libcdr::CDRColor(colorModel, palette[c])));
       }
commit 629dadcd8002d077fdd4f30d4e7f156b03e644f8
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Nov 20 15:36:46 2014 +0100

    nothing to do here if there's no bitmap data to read
    
    Change-Id: I07d1540d44dc97d7fbb88db363123cb28b7d812d

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 70fa511..d9d66c9 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2277,6 +2277,8 @@ void libcdr::CDRParser::readBmp(librevenge::RVNGInputStream *input, unsigned len
       palette.push_back(b | (g << 8) | (r << 16));
     }
   }
+  if (bmpsize == 0)
+    return;
   std::vector<unsigned char> bitmap(bmpsize);
   unsigned long tmpNumBytesRead = 0;
   const unsigned char *tmpBuffer = input->read(bmpsize, tmpNumBytesRead);
commit 4a1be786ced3083a9a609e4aa2af9bc5b89ec21e
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Nov 20 15:32:41 2014 +0100

    avoid out-of-bounds read
    
    Change-Id: I5510b80b9c6d1512f2e6e8bb25f48fb0bcded515

diff --git a/src/lib/CDRStylesCollector.cpp b/src/lib/CDRStylesCollector.cpp
index bce3d7f..f6aa912 100644
--- a/src/lib/CDRStylesCollector.cpp
+++ b/src/lib/CDRStylesCollector.cpp
@@ -244,7 +244,7 @@ void libcdr::CDRStylesCollector::collectText(unsigned textId, unsigned styleId,
 
     }
     tmpTextData.push_back(data[j++]);
-    if (tmpCharDescription & 0x01)
+    if ((tmpCharDescription & 0x01) && (j < data.size()))
       tmpTextData.push_back(data[j++]);
   }
   if (!tmpTextData.empty())
commit 88b4e8b39c3c187e2262786d469b0a9d9e2eae9d
Author: David Tardon <dtardon at redhat.com>
Date:   Tue Jul 29 18:22:41 2014 +0200

    check arguments
    
    Change-Id: I62f5abfe8f954f9825befcad589ded09ae8f7700

diff --git a/src/lib/CDRDocument.cpp b/src/lib/CDRDocument.cpp
index 5509716..de6ec95 100644
--- a/src/lib/CDRDocument.cpp
+++ b/src/lib/CDRDocument.cpp
@@ -61,6 +61,9 @@ stream is a Corel Draw Document that libcdr is able to parse
 */
 CDRAPI bool libcdr::CDRDocument::isSupported(librevenge::RVNGInputStream *input)
 {
+  if (!input)
+    return false;
+
   librevenge::RVNGInputStream *tmpInput = input;
   try
   {
@@ -104,6 +107,9 @@ CDRPaintInterface class implementation when needed. This is often commonly calle
 */
 CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter)
 {
+  if (!input || !painter)
+    return false;
+
   input->seek(0, librevenge::RVNG_SEEK_SET);
   bool retVal = false;
   unsigned version = 0;
diff --git a/src/lib/CMXDocument.cpp b/src/lib/CMXDocument.cpp
index 74f8619..ff8df44 100644
--- a/src/lib/CMXDocument.cpp
+++ b/src/lib/CMXDocument.cpp
@@ -25,6 +25,9 @@ stream is a Corel Draw Document that libcdr is able to parse
 CDRAPI bool libcdr::CMXDocument::isSupported(librevenge::RVNGInputStream *input)
 try
 {
+  if (!input)
+    return false;
+
   input->seek(0, librevenge::RVNG_SEEK_SET);
   unsigned riff = readU32(input);
   if (riff != CDR_FOURCC_RIFF && riff != CDR_FOURCC_RIFX)
@@ -56,6 +59,9 @@ CDRPaintInterface class implementation when needed. This is often commonly calle
 */
 CDRAPI bool libcdr::CMXDocument::parse(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter)
 {
+  if (!input || !painter)
+    return false;
+
   input->seek(0, librevenge::RVNG_SEEK_SET);
   CDRParserState ps;
   CDRStylesCollector stylesCollector(ps);


More information about the Libreoffice-commits mailing list