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);
}