File GraphicsMagick-CVE-2018-5685.patch of Package GraphicsMagick.7782

Index: GraphicsMagick-1.3.25/coders/bmp.c
===================================================================
--- GraphicsMagick-1.3.25.orig/coders/bmp.c	2018-01-24 12:41:51.721329448 +0100
+++ GraphicsMagick-1.3.25/coders/bmp.c	2018-01-24 12:42:34.670077042 +0100
@@ -1062,31 +1062,31 @@ static Image *ReadBMPImage(const ImageIn
         (void) memset(&shift,0,sizeof(PixelPacket));
         (void) memset(&quantum_bits,0,sizeof(PixelPacket));
         if (bmp_info.red_mask != 0)
-          while (((bmp_info.red_mask << shift.red) & 0x80000000UL) == 0)
+          while ((shift.red < 32U) && (((bmp_info.red_mask << shift.red) & 0x80000000UL) == 0))
             shift.red++;
         if (bmp_info.green_mask != 0)
-          while (((bmp_info.green_mask << shift.green) & 0x80000000UL) == 0)
+          while ((shift.green < 32U) && (((bmp_info.green_mask << shift.green) & 0x80000000UL) == 0))
             shift.green++;
         if (bmp_info.blue_mask != 0)
-          while (((bmp_info.blue_mask << shift.blue) & 0x80000000UL) == 0)
+          while ((shift.blue < 32U) && (((bmp_info.blue_mask << shift.blue) & 0x80000000UL) == 0))
             shift.blue++;
         if (bmp_info.alpha_mask != 0)
-          while (((bmp_info.alpha_mask << shift.opacity) & 0x80000000UL) == 0)
+          while ((shift.opacity < 32U) && (((bmp_info.alpha_mask << shift.opacity) & 0x80000000UL) == 0))
             shift.opacity++;
         sample=shift.red;
-        while (((bmp_info.red_mask << sample) & 0x80000000UL) != 0)
+        while ((sample < 32U) && (((bmp_info.red_mask << sample) & 0x80000000UL) != 0))
           sample++;
         quantum_bits.red=(Quantum) (sample-shift.red);
         sample=shift.green;
-        while (((bmp_info.green_mask << sample) & 0x80000000UL) != 0)
+        while ((sample < 32U) && (((bmp_info.green_mask << sample) & 0x80000000UL) != 0))
           sample++;
         quantum_bits.green=(Quantum) (sample-shift.green);
         sample=shift.blue;
-        while (((bmp_info.blue_mask << sample) & 0x80000000UL) != 0)
+        while ((sample < 32U) && (((bmp_info.blue_mask << sample) & 0x80000000UL) != 0))
           sample++;
         quantum_bits.blue=(Quantum) (sample-shift.blue);
         sample=shift.opacity;
-        while (((bmp_info.alpha_mask << sample) & 0x80000000UL) != 0)
+        while ((sample < 32U) && (((bmp_info.alpha_mask << sample) & 0x80000000UL) != 0))
           sample++;
         quantum_bits.opacity=(Quantum) (sample-shift.opacity);
       }
openSUSE Build Service is sponsored by