CVS update of imagemagick/coders (pnm.c)

Luciano Bello luciano-guest at alioth.debian.org
Mon Mar 19 15:59:18 CET 2007


    Date: Monday, March 19, 2007 @ 14:59:18
  Author: luciano-guest
    Path: /cvsroot/pkg-gmagick/imagemagick/coders

Modified: pnm.c

Fixing segfault in PNM coder. Based on http://bugs.debian.org/413037


-------+
 pnm.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+)


Index: imagemagick/coders/pnm.c
diff -u imagemagick/coders/pnm.c:1.1 imagemagick/coders/pnm.c:1.2
--- imagemagick/coders/pnm.c:1.1	Tue Feb 27 01:07:04 2007
+++ imagemagick/coders/pnm.c	Mon Mar 19 14:59:18 2007
@@ -215,6 +215,20 @@
   return(value);
 }
 
+
+#define ValidateScalingIndex(image, index, max) \
+	do { \
+		if (index < 0 || index > max) \
+                     ThrowReaderException(CorruptImageError,"CorruptImage"); \
+	} while (0)
+
+#define ValidateScalingPixel(image, pixel, max) \
+	do { \
+		ValidateScalingIndex(image, pixel.red, max); \
+		ValidateScalingIndex(image, pixel.green, max); \
+		ValidateScalingIndex(image, pixel.blue, max); \
+	} while (0)
+
 static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
 {
 #define PushCharPixel(pixel,p) \
@@ -420,6 +434,7 @@
           for (x=0; x < (long) image->columns; x++)
           {
             intensity=PNMInteger(image,10);
+            ValidateScalingIndex(image, intensity, max_value);
             if (scale != (Quantum *) NULL)
               intensity=scale[intensity];
             index=(IndexPacket) intensity;
@@ -462,6 +477,7 @@
             pixel.red=PNMInteger(image,10);
             pixel.green=PNMInteger(image,10);
             pixel.blue=PNMInteger(image,10);
+            ValidateScalingPixel(image, pixel, max_value);
             if (scale != (Quantum *) NULL)
               {
                 pixel.red=scale[pixel.red];



More information about the pkg-gmagick-commit mailing list