File GraphicsMagick-dcm.c-update.patch of Package GraphicsMagick.7782

--- a/coders/dcm.c	2018-02-08 14:16:05.367700604 +0100
+++ b/coders/dcm.c	2018-01-10 12:57:36.015306751 +0100
@@ -1,5 +1,5 @@
 /*
-% Copyright (C) 2003-2009 GraphicsMagick Group
+% Copyright (C) 2003-2017 GraphicsMagick Group
 % Copyright (C) 2002 ImageMagick Studio
 % Copyright 1991-1999 E. I. du Pont de Nemours and Company
 %
@@ -136,7 +136,7 @@ typedef struct _DicomStream
     msb_state;
 
   Dicom_PI
-    phot_interp;  
+    phot_interp;
 
   double
     window_center,
@@ -185,7 +185,7 @@ typedef struct _DicomStream
   Quantum
     *rescale_map;
 
-#if defined(USE_GRAYMAP)  
+#if defined(USE_GRAYMAP)
   unsigned short
     *graymap;
 #endif
@@ -2972,7 +2972,7 @@ static MagickPassFail funcDCM_TriggerTim
   ARG_NOT_USED(exception);
 
   (void) SetImageAttribute(image,"TriggerTime",(char *) dcm->data);
-  return MagickPass;  
+  return MagickPass;
 }
 
 static MagickPassFail funcDCM_FieldOfView(Image *image,DicomStream *dcm,ExceptionInfo *exception)
@@ -3001,7 +3001,7 @@ static MagickPassFail funcDCM_ImageOrien
 {
   ARG_NOT_USED(exception);
   (void) SetImageAttribute(image,"ImageOrientation",(char *) dcm->data);
-  return MagickPass; 
+  return MagickPass;
 }
 
 static MagickPassFail funcDCM_SliceLocation(Image *image,DicomStream *dcm,ExceptionInfo *exception)
@@ -3262,7 +3262,7 @@ static MagickPassFail funcDCM_PaletteDes
 
 static MagickPassFail funcDCM_LUT(Image *image,DicomStream *dcm,ExceptionInfo *exception)
 {
-#if defined(USE_GRAYMAP)  
+#if defined(USE_GRAYMAP)
   /*
     1200 = grey, LUT data 3006 = LUT data
   */
@@ -3367,7 +3367,7 @@ static magick_uint8_t DCM_RLE_ReadByte(I
         rep_ct,
         rep_char;
 
-      /* We need to read the next command pair */     
+      /* We need to read the next command pair */
       if (dcm->frag_bytes <= 2)
         dcm->frag_bytes = 0;
       else
@@ -3545,7 +3545,7 @@ static MagickPassFail DCM_ReadElement(Im
   dcm->datum=0;
   if (dcm->quantum == 4)
     {
-      dcm->datum=(long) dcm->funcReadLong(image);
+      dcm->datum=dcm->funcReadLong(image);
       if (EOFBlob(image))
         {
           ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename);
@@ -3634,7 +3634,7 @@ static MagickPassFail DCM_ReadElement(Im
     }
   else if ((dcm->length == 1) && (dcm->quantum == 4))
     {
-      dcm->datum=(long) dcm->funcReadLong(image);
+      dcm->datum=dcm->funcReadLong(image);
       if (EOFBlob(image))
         {
           ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename);
@@ -3646,7 +3646,7 @@ static MagickPassFail DCM_ReadElement(Im
       size_t
         size;
 
-      if (dcm->length > GetBlobSize(image))
+      if (dcm->length > ((size_t) GetBlobSize(image)))
         {
           ThrowException(exception,CorruptImageError,InsufficientImageDataInFile,image->filename);
           return MagickFail;
@@ -3662,7 +3662,7 @@ static MagickPassFail DCM_ReadElement(Im
           ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
           return MagickFail;
         }
-      size=dcm->quantum*dcm->length;
+      size=MagickArraySize(dcm->quantum,dcm->length);
       if (ReadBlob(image,size,(char *) dcm->data) != size)
         {
           ThrowException(exception,CorruptImageError,UnexpectedEndOfFile,image->filename);
@@ -3813,7 +3813,7 @@ static MagickPassFail DCM_SetupRescaleMa
         dcm->rescale_map[i]=dcm->max_value_out;
       else
         dcm->rescale_map[i]=(Quantum)(((Xr-Xw_min)/(win_width-1))*dcm->max_value_out+0.5);
-    }  
+    }
   if (dcm->phot_interp == DCM_PI_MONOCHROME1)
     for (i=0; i < (dcm->max_value_in+1); i++)
       dcm->rescale_map[i]=dcm->max_value_out-dcm->rescale_map[i];
@@ -4391,7 +4391,7 @@ static MagickPassFail DCM_ReadOffsetTabl
       return MagickFail;
     }
 
-  dcm->offset_arr=MagickAllocateArray(magick_uint32_t *,dcm->offset_ct,sizeof(magick_uint32_t));  
+  dcm->offset_arr=MagickAllocateArray(magick_uint32_t *,dcm->offset_ct,sizeof(magick_uint32_t));
   if (dcm->offset_arr == (magick_uint32_t *) NULL)
     {
       ThrowException(exception,ResourceLimitError,MemoryAllocationFailed,image->filename);
@@ -4449,6 +4449,14 @@ static MagickPassFail DCM_ReadNonNativeI
   if (DCM_ReadOffsetTable(*image,dcm,exception) == MagickFail)
     return MagickFail;
 
+  if (dcm->number_scenes == 0U)
+    {
+      ThrowException(exception,CorruptImageError,
+                     ImproperImageHeader,
+                     image_info->filename);
+      return MagickFail;
+    }
+
   status=MagickPass;
   for (scene=0; scene < dcm->number_scenes; scene++)
     {
@@ -4681,7 +4689,7 @@ static Image *ReadDCMImage(const ImageIn
     Now process the image data
   */
   if (status == MagickFail)
-    ; 
+    ;
   else
     if ((dcm.columns == 0) || (dcm.rows == 0))
       {
@@ -4846,7 +4854,7 @@ static Image *ReadDCMImage(const ImageIn
   */
 
   if (dcm.offset_arr != NULL)
-    MagickFreeMemory(dcm.offset_arr);    
+    MagickFreeMemory(dcm.offset_arr);
   if (dcm.data != NULL)
     MagickFreeMemory(dcm.data);
 #if defined(USE_GRAYMAP)
openSUSE Build Service is sponsored by