[poppler] poppler/GfxState.cc

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 2 21:41:39 UTC 2020


 poppler/GfxState.cc |   15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

New commits:
commit 0a243dd9d20bc16f4e83af3e2043c0253b4e4625
Author: Albert Astals Cid <aacid at kde.org>
Date:   Mon Nov 2 22:21:52 2020 +0100

    GfxFunctionShading::getColor: Fix buffer overrun in broken documents
    
    Issue #979

diff --git a/poppler/GfxState.cc b/poppler/GfxState.cc
index ba7763aa..eaf96dba 100644
--- a/poppler/GfxState.cc
+++ b/poppler/GfxState.cc
@@ -3596,19 +3596,22 @@ GfxShading *GfxFunctionShading::copy() const
 void GfxFunctionShading::getColor(double x, double y, GfxColor *color) const
 {
     double in[2], out[gfxColorMaxComps];
-    int i;
 
     // NB: there can be one function with n outputs or n functions with
     // one output each (where n = number of color components)
-    for (i = 0; i < gfxColorMaxComps; ++i) {
-        out[i] = 0;
+    for (double &i : out) {
+        i = 0;
     }
     in[0] = x;
     in[1] = y;
-    for (i = 0; i < getNFuncs(); ++i) {
-        funcs[i]->transform(in, &out[i]);
+    for (int i = 0; i < getNFuncs(); ++i) {
+        if (likely(funcs[i]->getInputSize() <= 2)) {
+            funcs[i]->transform(in, &out[i]);
+        } else {
+            error(errSyntaxWarning, -1, "GfxFunctionShading::getColor: function with input size > 2");
+        }
     }
-    for (i = 0; i < gfxColorMaxComps; ++i) {
+    for (int i = 0; i < gfxColorMaxComps; ++i) {
         color->c[i] = dblToCol(out[i]);
     }
 }


More information about the poppler mailing list