[poppler] 2 commits - poppler/Gfx.cc poppler/GfxState.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Thu Jan 8 10:51:14 PST 2015


 poppler/Gfx.cc      |   28 +++++++++++++++++-----------
 poppler/GfxState.cc |   10 +++++++---
 2 files changed, 24 insertions(+), 14 deletions(-)

New commits:
commit 7ce86b9be058408eb567d8d0b9747853a66c116f
Author: Albert Astals Cid <aacid at kde.org>
Date:   Thu Jan 8 17:35:28 2015 +0100

    Remove assert in gouraudFillTriangle
    
    We don't *need* the assert, an error() is fine and the malformed document
    will just get rendered wrongly instead of "crashing"
    
    Bugs #85274

diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc
index 6ad1b2c..07d95b3 100644
--- a/poppler/Gfx.cc
+++ b/poppler/Gfx.cc
@@ -14,7 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2005 Jonathan Blandford <jrb at redhat.com>
-// Copyright (C) 2005-2013 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2005-2013, 2015 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2006 Thorkild Stray <thorkild at ifi.uio.no>
 // Copyright (C) 2006 Kristian Høgsberg <krh at redhat.com>
 // Copyright (C) 2006-2011 Carlos Garcia Campos <carlosgc at gnome.org>
@@ -3355,6 +3355,12 @@ void Gfx::doGouraudTriangleShFill(GfxGouraudTriangleShading *shading) {
   delete reusablePath;
 }
 
+static inline void checkTrue(bool b, const char *message) {
+  if (unlikely(!b)) {
+    error(errSyntaxError, -1, message);
+  }
+}
+
 void Gfx::gouraudFillTriangle(double x0, double y0, GfxColor *color0,
 			      double x1, double y1, GfxColor *color1,
 			      double x2, double y2, GfxColor *color2,
@@ -3373,11 +3379,11 @@ void Gfx::gouraudFillTriangle(double x0, double y0, GfxColor *color0,
     state->setFillColor(color0);
     out->updateFillColor(state);
 
-    path->reset();                         assert(!path->isEnd());
-    path->setCoord(x0,y0);  path->next();  assert(!path->isEnd());
-    path->setCoord(x1,y1);  path->next();  assert(!path->isEnd());
-    path->setCoord(x2,y2);  path->next();  assert(!path->isEnd());
-    path->setCoord(x0,y0);  path->next();  assert( path->isEnd());
+    path->reset();                         checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x0,y0);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x1,y1);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x2,y2);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x0,y0);  path->next();  checkTrue( path->isEnd(), "Path should be at end");
     out->fill(state);
 
   } else {
@@ -3420,11 +3426,11 @@ void Gfx::gouraudFillTriangle(double x0, double y0, double color0,
     state->setFillColor(&color);
     out->updateFillColor(state);
 
-    path->reset();                         assert(!path->isEnd());
-    path->setCoord(x0,y0);  path->next();  assert(!path->isEnd());
-    path->setCoord(x1,y1);  path->next();  assert(!path->isEnd());
-    path->setCoord(x2,y2);  path->next();  assert(!path->isEnd());
-    path->setCoord(x0,y0);  path->next();  assert( path->isEnd());
+    path->reset();                         checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x0,y0);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x1,y1);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x2,y2);  path->next();  checkTrue(!path->isEnd(), "Path should not be at end");
+    path->setCoord(x0,y0);  path->next();  checkTrue( path->isEnd(), "Path should be at end");
     out->fill(state);
 
   } else {
commit 9e9df4b20d17478996780008bc9802a857d173fc
Author: Albert Astals Cid <aacid at kde.org>
Date:   Thu Jan 8 17:01:52 2015 +0100

    Fix crash on broken document
    
    Bug #85281

diff --git a/poppler/GfxState.cc b/poppler/GfxState.cc
index 359c0d6..b439942 100644
--- a/poppler/GfxState.cc
+++ b/poppler/GfxState.cc
@@ -16,7 +16,7 @@
 // Copyright (C) 2005 Kristian Høgsberg <krh at redhat.com>
 // Copyright (C) 2006, 2007 Jeff Muizelaar <jeff at infidigm.net>
 // Copyright (C) 2006, 2010 Carlos Garcia Campos <carlosgc at gnome.org>
-// Copyright (C) 2006-2014 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2006-2015 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009, 2012 Koji Otani <sho at bbr.jp>
 // Copyright (C) 2009, 2011-2014 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2009 Christian Persch <chpe at gnome.org>
@@ -3048,8 +3048,12 @@ GfxColorSpace *GfxDeviceNColorSpace::copy() {
   int *mappingA = NULL;
 
   GooList *sepsCSA = new GooList(sepsCS->getLength());
-  for (i = 0; i < sepsCS->getLength(); i++)
-    sepsCSA->append(((GfxSeparationColorSpace *) sepsCS->get(i))->copy());
+  for (i = 0; i < sepsCS->getLength(); i++) {
+    GfxSeparationColorSpace *scs = (GfxSeparationColorSpace *) sepsCS->get(i);
+    if (likely(scs)) {
+      sepsCSA->append(scs->copy());
+    }
+  }
   if (mapping != NULL) {
     mappingA = (int *)gmalloc(sizeof(int) * nComps);
     for (i = 0; i < nComps; i++)


More information about the poppler mailing list