fofi/FoFiType1C.cc         |    7 ++++---
 poppler/SplashOutputDev.cc |    7 +++++++
 poppler/XRef.cc            |   16 ++++++++--------
 3 files changed, 19 insertions(+), 11 deletions(-)

New commits:
commit 60b4fe65bc9dc9b82bbadf0be2e3781be796a13d
Author: Albert Astals Cid <[email protected]>
Date:   Tue May 1 02:46:17 2018 +0200

    FoFiType1C::cvtGlyph: Fix infinite recursion on malformed documents
    
    Bugs #104942, #103238

diff --git a/fofi/FoFiType1C.cc b/fofi/FoFiType1C.cc
index 03e77993..b14561ff 100644
--- a/fofi/FoFiType1C.cc
+++ b/fofi/FoFiType1C.cc
@@ -13,7 +13,7 @@
 // All changes made under the Poppler project to this file are licensed
 // under GPL version 2 or later
 //
-// Copyright (C) 2009, 2010, 2017 Albert Astals Cid <[email protected]>
+// Copyright (C) 2009, 2010, 2017, 2018 Albert Astals Cid <[email protected]>
 // Copyright (C) 2012 Thomas Freitag <[email protected]>
 //
 // To see a description of the changes please see the Changelog file that
@@ -32,6 +32,7 @@
 #include <math.h>
 #include "goo/gmem.h"
 #include "goo/gstrtod.h"
+#include "goo/GooLikely.h"
 #include "goo/GooString.h"
 #include "poppler/Error.h"
 #include "FoFiEncodings.h"
@@ -1361,7 +1362,7 @@ void FoFiType1C::cvtGlyph(int offset, int nBytes, 
GooString *charBuf,
          --nOps;
          ok = gTrue;
          getIndexVal(subrIdx, k, &val, &ok);
-         if (ok) {
+         if (likely(ok && val.pos != offset)) {
            cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse);
          }
        } else {
@@ -1596,7 +1597,7 @@ void FoFiType1C::cvtGlyph(int offset, int nBytes, 
GooString *charBuf,
          --nOps;
          ok = gTrue;
          getIndexVal(&gsubrIdx, k, &val, &ok);
-         if (ok) {
+         if (likely(ok && val.pos != offset)) {
            cvtGlyph(val.pos, val.len, charBuf, subrIdx, pDict, gFalse);
          }
        } else {
commit 8429a67536b7c2f6d752e4a522ee98e6f76a40f9
Author: Albert Astals Cid <[email protected]>
Date:   Tue May 1 02:44:37 2018 +0200

    XRef: Fix runtime undefined behaviour
    
    Going to the position -1 of an array is undefined behaviour, so don't do
    it
    
    Bug #105970

diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index 5d3b98ff..25bc18a4 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -940,11 +940,11 @@ GBool XRef::constructXRef(GBool *wasReconstructed, GBool 
needCatalogDict) {
           if ((*p & 0xff) == 0) {
             //new line, continue with next line!
             str->getLine(buf, 256);
-            p = buf - 1;
-          }
-         do {
+            p = buf;
+          } else {
            ++p;
-         } while (*p && isspace(*p & 0xff));
+         }
+         while (*p && isspace(*p & 0xff)) ++p;
          if (isdigit(*p & 0xff)) {
            gen = atoi(p);
            do {
@@ -954,11 +954,11 @@ GBool XRef::constructXRef(GBool *wasReconstructed, GBool 
needCatalogDict) {
               if ((*p & 0xff) == 0) {
                 //new line, continue with next line!
                 str->getLine(buf, 256);
-                p = buf - 1;
-              }
-             do {
+                p = buf;
+              } else {
                ++p;
-             } while (*p && isspace(*p & 0xff));
+             }
+             while (*p && isspace(*p & 0xff)) ++p;
              if (!strncmp(p, "obj", 3)) {
                if (num >= size) {
                  newSize = (num + 1 + 255) & ~255;
commit 9d42769705180d6df4ba8415849ef8790a0e9b1d
Author: Albert Astals Cid <[email protected]>
Date:   Tue May 1 02:43:21 2018 +0200

    Add the invisible character check to SplashOutputDev::beginType3Char
    
    Bug #106244

diff --git a/poppler/SplashOutputDev.cc b/poppler/SplashOutputDev.cc
index 73963302..a19e8c66 100644
--- a/poppler/SplashOutputDev.cc
+++ b/poppler/SplashOutputDev.cc
@@ -2512,6 +2512,13 @@ GBool SplashOutputDev::beginType3Char(GfxState *state, 
double x, double y,
   double x1, y1, xMin, yMin, xMax, yMax, xt, yt;
   int i, j;
 
+  // check for invisible text -- this is used by Acrobat Capture
+  if (state->getRender() == 3) {
+    // this is a bit of cheating, we say yes, font is already on cache
+    // so we actually skip the rendering of it
+    return gTrue;
+  }
+
   if (skipHorizText || skipRotatedText) {
     state->getFontTransMat(&m[0], &m[1], &m[2], &m[3]);
     horiz = m[0] > 0 && fabs(m[1]) < 0.001 &&
_______________________________________________
poppler mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to