[poppler] utils/ImageOutputDev.cc

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Mar 29 17:20:53 UTC 2021


 utils/ImageOutputDev.cc |   16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

New commits:
commit 104fc940ca3c3eb8b706abd11d35be83dbcd0c3b
Author: Albert Astals Cid <aacid at kde.org>
Date:   Mon Mar 29 19:12:23 2021 +0200

    pdfimages: Do not assert in "too big images"
    
    Fixes #1061

diff --git a/utils/ImageOutputDev.cc b/utils/ImageOutputDev.cc
index 879d94ee..4bb9d8ab 100644
--- a/utils/ImageOutputDev.cc
+++ b/utils/ImageOutputDev.cc
@@ -373,6 +373,16 @@ void ImageOutputDev::writeImageFile(ImgWriter *writer, ImageFormat format, const
         }
     }
 
+    int pixelSize = sizeof(unsigned int);
+    if (format == imgRGB48)
+        pixelSize = 2 * sizeof(unsigned int);
+
+    row = (unsigned char *)gmallocn_checkoverflow(width, pixelSize);
+    if (!row) {
+        error(errIO, -1, "Image data for '{0:s}' is too big. {1:d} width with {2:d} bytes per pixel", fileName, width, pixelSize);
+        return;
+    }
+
     if (format != imgMonochrome) {
         // initialize stream
         imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), colorMap->getBits());
@@ -382,12 +392,6 @@ void ImageOutputDev::writeImageFile(ImgWriter *writer, ImageFormat format, const
         str->reset();
     }
 
-    int pixelSize = sizeof(unsigned int);
-    if (format == imgRGB48)
-        pixelSize = 2 * sizeof(unsigned int);
-
-    row = (unsigned char *)gmallocn(width, pixelSize);
-
     // PDF masks use 0 = draw current color, 1 = leave unchanged.
     // We invert this to provide the standard interpretation of alpha
     // (0 = transparent, 1 = opaque). If the colorMap already inverts


More information about the poppler mailing list