[Libreoffice-commits] libcdr.git: 9 commits - configure.ac NEWS src/conv src/lib

David Tardon dtardon at redhat.com
Fri Dec 25 10:21:50 PST 2015


 NEWS                       |   10 ++++++++++
 configure.ac               |    2 +-
 src/conv/raw/cdr2raw.cpp   |   17 +++++++++++++++++
 src/conv/raw/cmx2raw.cpp   |   17 +++++++++++++++++
 src/conv/svg/cdr2xhtml.cpp |   19 ++++++++++++++++++-
 src/conv/svg/cmx2xhtml.cpp |   19 ++++++++++++++++++-
 src/conv/text/cdr2text.cpp |   19 ++++++++++++++++++-
 src/conv/text/cmx2text.cpp |   19 ++++++++++++++++++-
 src/lib/CDRParser.cpp      |    8 ++++----
 src/lib/CMXParser.cpp      |    5 +++++
 10 files changed, 126 insertions(+), 9 deletions(-)

New commits:
commit cd98b72f3293c4fd81bdf51f7ca3f347baa52536
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 19:16:44 2015 +0100

    coverity#1219668 untrusted loop bound
    
    Change-Id: I1d493b4c6d79f16c5ed5d68f23efd4b14e85da7a

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 36697f5..2351925 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2668,7 +2668,7 @@ void libcdr::CDRParser::readStlt(librevenge::RVNGInputStream *input, unsigned le
     input->seek(784 * static_cast<long>(numTabs), librevenge::RVNG_SEEK_CUR);
     unsigned numBullets = readU32(input);
     CDR_DEBUG_MSG(("CDRParser::readStlt numBullets 0x%x\n", numBullets));
-    for (i=0; i<numBullets; ++i)
+    for (i=0; i<numBullets && getRemainingLength(input) >= 16; ++i)
     {
       input->seek(40, librevenge::RVNG_SEEK_CUR);
       if (m_version > 1300)
commit 525cd4a1a868bbf29c511ab00669518aa9818073
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 19:14:35 2015 +0100

    coverity#1219658 untrusted loop bound
    
    Change-Id: Ibbe274f8ef136a42f290c41806224f6f6f93dcfb

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 630cf33..36697f5 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -2914,7 +2914,7 @@ void libcdr::CDRParser::readTxsm(librevenge::RVNGInputStream *input, unsigned le
       num4 = readU32(input);
     }
 
-    for (unsigned j = 0; j < num4; ++j)
+    for (unsigned j = 0; j < num4 && getRemainingLength(input) >= 14; ++j)
     {
       unsigned stlId = readU32(input);
       if (m_version >= 1300 && num)
commit c6ef8e3f7ca896b3be34c29e4bb8cee1deed4026
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 19:12:16 2015 +0100

    coverity#1219657 untrusted loop bound
    
    Change-Id: I8fdc5ec1b1c02124594faa845b89c851307499ba

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index e9b4a19..630cf33 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -3150,7 +3150,7 @@ void libcdr::CDRParser::readTxsm6(librevenge::RVNGInputStream *input)
   unsigned numSt = readU32(input);
   unsigned i = 0;
   std::map<unsigned, CDRCharacterStyle> charStyles;
-  for (; i<numSt; ++i)
+  for (; i<numSt && getRemainingLength(input) >= 58; ++i)
   {
     CDRCharacterStyle charStyle;
     unsigned char flag = readU8(input);
commit 5b43f6dabdf65be376de3ece7ab24fd7a5e94b83
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 19:10:16 2015 +0100

    coverity#1219656 untrusted loop bound
    
    Change-Id: I949c0bc68aec676f0bff78d284738b6e384f2973

diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index fa54117..e9b4a19 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -3220,7 +3220,7 @@ void libcdr::CDRParser::readTxsm5(librevenge::RVNGInputStream *input)
   unsigned numSt = readU16(input);
   unsigned i = 0;
   std::map<unsigned, CDRCharacterStyle> charStyles;
-  for (; i<numSt; ++i)
+  for (; i<numSt && getRemainingLength(input) >= 34; ++i)
   {
     CDRCharacterStyle charStyle;
     unsigned char flag = readU8(input);
commit 776ce0dfcc23cead3e57ee781e924bac4eee74d0
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 19:00:21 2015 +0100

    avoid reallocations
    
    Change-Id: If01ca063b2f29ccf8d3ecf473e7d351c5b653bb5

diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index e876071..c94e027 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -363,6 +363,8 @@ void libcdr::CMXParser::readPolyCurve(librevenge::RVNGInputStream *input)
         pointNum = readU16(input);
         if (pointNum > getRemainingLength(input) / (2 * 4 + 1))
           pointNum = getRemainingLength(input) / (2 * 4 + 1);
+        points.reserve(pointNum);
+        pointTypes.reserve(pointNum);
         for (unsigned i = 0; i < pointNum; ++i)
         {
           std::pair<double, double> point;
commit 5f23be87e2b13319a7751f25ce3c88165a52bb9d
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 18:59:31 2015 +0100

    coverity#1219652 untrusted loop bound
    
    Change-Id: I9a9c6406b5e2ed2616075e97001701bb45c4ccd2

diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index 68b0e92..e876071 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -361,6 +361,8 @@ void libcdr::CMXParser::readPolyCurve(librevenge::RVNGInputStream *input)
         break;
       case CMX_Tag_PolyCurve_PointList:
         pointNum = readU16(input);
+        if (pointNum > getRemainingLength(input) / (2 * 4 + 1))
+          pointNum = getRemainingLength(input) / (2 * 4 + 1);
         for (unsigned i = 0; i < pointNum; ++i)
         {
           std::pair<double, double> point;
commit 6f28e50debdf1f0a44f5fa7ed7e43a6d50b20e84
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 18:55:41 2015 +0100

    add missing break
    
    Change-Id: I26f64966bb510588610c3f48770e3cf6636aa638

diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index 8c6eb6c..68b0e92 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -370,6 +370,7 @@ void libcdr::CMXParser::readPolyCurve(librevenge::RVNGInputStream *input)
         }
         for (unsigned j = 0; j < pointNum; ++j)
           pointTypes.push_back(readU8(input, m_bigEndian));
+        break;
       default:
         break;
       }
commit af5ef20d8a0ac1c7cae2bc493156d299f246b214
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 18:26:08 2015 +0100

    prepare for a release
    
    Change-Id: Id180c188c4c2675ab96417d1b4f2ea8f0052eae5

diff --git a/NEWS b/NEWS
index 61152a5..1f327d7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,13 @@
+libcdr 0.1.2
+
+* Fix various crashes and hangs when reading broken files found with the
+  help of american-fuzzy-lop.
+* Fix build with boost 1.59. (rhbz#1258127)
+* Fix various problems detected by Coverity.
+* Do not drop empty text lines. (tdf#67873)
+* Make --help output of all command line tools more help2man-friendly.
+* Several other small improvements.
+
 libcdr 0.1.1
 
 * Fix several problems found by Coverity.
diff --git a/configure.ac b/configure.ac
index b6285ab..0d57fe2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7,7 +7,7 @@ AC_PREREQ([2.65])
 # ====================
 m4_define([libcdr_version_major],[0])
 m4_define([libcdr_version_minor],[1])
-m4_define([libcdr_version_micro],[1])
+m4_define([libcdr_version_micro],[2])
 m4_define([libcdr_version],[libcdr_version_major.libcdr_version_minor.libcdr_version_micro])
 
 # =============
commit b2e5cbf18b4eb690fb2704bfaa3215075863b23c
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Dec 25 18:52:08 2015 +0100

    make help output even more help2man-friendly
    
    Change-Id: I6dbe0ddcf67b91e67c2427cfa78c271f77a56433

diff --git a/src/conv/raw/cdr2raw.cpp b/src/conv/raw/cdr2raw.cpp
index 1b68a29..c5217ba 100644
--- a/src/conv/raw/cdr2raw.cpp
+++ b/src/conv/raw/cdr2raw.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 #include <librevenge/librevenge.h>
@@ -14,6 +18,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -26,11 +34,18 @@ int printUsage()
   printf("Options:\n");
   printf("\t--callgraph           display the call graph nesting level\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cdr2raw " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -45,6 +60,8 @@ int main(int argc, char *argv[])
   {
     if (!strcmp(argv[i], "--callgraph"))
       printIndentLevel = true;
+    else if (!strcmp(argv[i], "--version"))
+      return printVersion();
     else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
diff --git a/src/conv/raw/cmx2raw.cpp b/src/conv/raw/cmx2raw.cpp
index 63d2f7a..62223cf 100644
--- a/src/conv/raw/cmx2raw.cpp
+++ b/src/conv/raw/cmx2raw.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 #include <librevenge/librevenge.h>
@@ -14,6 +18,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -26,11 +34,18 @@ int printUsage()
   printf("Options:\n");
   printf("\t--callgraph           display the call graph nesting level\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cmx2raw " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -45,6 +60,8 @@ int main(int argc, char *argv[])
   {
     if (!strcmp(argv[i], "--callgraph"))
       printIndentLevel = true;
+    else if (!strcmp(argv[i], "--version"))
+      return printVersion();
     else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
diff --git a/src/conv/svg/cdr2xhtml.cpp b/src/conv/svg/cdr2xhtml.cpp
index ef68dde..082926f 100644
--- a/src/conv/svg/cdr2xhtml.cpp
+++ b/src/conv/svg/cdr2xhtml.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <iostream>
 #include <sstream>
 #include <stdio.h>
@@ -16,6 +20,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -27,11 +35,18 @@ int printUsage()
   printf("\n");
   printf("Options:\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cdr2xhtml " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -43,7 +58,9 @@ int main(int argc, char *argv[])
 
   for (int i = 1; i < argc; i++)
   {
-    if (!file && strncmp(argv[i], "--", 2))
+    if (!strcmp(argv[i], "--version"))
+      return printVersion();
+    else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
       return printUsage();
diff --git a/src/conv/svg/cmx2xhtml.cpp b/src/conv/svg/cmx2xhtml.cpp
index 2c926ec..524bd63 100644
--- a/src/conv/svg/cmx2xhtml.cpp
+++ b/src/conv/svg/cmx2xhtml.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <iostream>
 #include <sstream>
 #include <stdio.h>
@@ -16,6 +20,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -27,11 +35,18 @@ int printUsage()
   printf("\n");
   printf("Options:\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cmx2xhtml " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -43,7 +58,9 @@ int main(int argc, char *argv[])
 
   for (int i = 1; i < argc; i++)
   {
-    if (!file && strncmp(argv[i], "--", 2))
+    if (!strcmp(argv[i], "--version"))
+      return printVersion();
+    else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
       return printUsage();
diff --git a/src/conv/text/cdr2text.cpp b/src/conv/text/cdr2text.cpp
index dfc2645..f8a5b41 100644
--- a/src/conv/text/cdr2text.cpp
+++ b/src/conv/text/cdr2text.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 
@@ -15,6 +19,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -26,11 +34,18 @@ int printUsage()
   printf("\n");
   printf("Options:\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cdr2text " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -42,7 +57,9 @@ int main(int argc, char *argv[])
 
   for (int i = 1; i < argc; i++)
   {
-    if (!file && strncmp(argv[i], "--", 2))
+    if (!strcmp(argv[i], "--version"))
+      return printVersion();
+    else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
       return printUsage();
diff --git a/src/conv/text/cmx2text.cpp b/src/conv/text/cmx2text.cpp
index b734855..1fa595e 100644
--- a/src/conv/text/cmx2text.cpp
+++ b/src/conv/text/cmx2text.cpp
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 #include <librevenge/librevenge.h>
@@ -14,6 +18,10 @@
 #include <librevenge-stream/librevenge-stream.h>
 #include <libcdr/libcdr.h>
 
+#ifndef VERSION
+#define VERSION "UNKNOWN VERSION"
+#endif
+
 namespace
 {
 
@@ -25,11 +33,18 @@ int printUsage()
   printf("\n");
   printf("Options:\n");
   printf("\t--help                show this help message\n");
+  printf("\t--version             show version information and exit\n");
   printf("\n");
   printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
   return -1;
 }
 
+int printVersion()
+{
+  printf("cmx2text " VERSION "\n");
+  return 0;
+}
+
 } // anonymous namespace
 
 int main(int argc, char *argv[])
@@ -41,7 +56,9 @@ int main(int argc, char *argv[])
 
   for (int i = 1; i < argc; i++)
   {
-    if (!file && strncmp(argv[i], "--", 2))
+    if (!strcmp(argv[i], "--version"))
+      return printVersion();
+    else if (!file && strncmp(argv[i], "--", 2))
       file = argv[i];
     else
       return printUsage();


More information about the Libreoffice-commits mailing list