Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:GA
ImageMagick
ImageMagick-CVE-2017-8346.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ImageMagick-CVE-2017-8346.patch of Package ImageMagick
Index: ImageMagick-6.8.8-1/coders/dcm.c =================================================================== --- ImageMagick-6.8.8-1.orig/coders/dcm.c 2017-05-05 13:31:42.944243167 +0200 +++ ImageMagick-6.8.8-1/coders/dcm.c 2017-05-05 13:48:44.737361678 +0200 @@ -2796,6 +2796,15 @@ static unsigned short ReadDCMMSBShort(DC static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception) { +#define ThrowDCMReaderException(exception,message) \ +{ \ + if (data != (unsigned char *) NULL) \ + data=(unsigned char *) RelinquishMagickMemory(data); \ + if (stream_info != (DCMStreamInfo *) NULL) \ + stream_info=(DCMStreamInfo *) RelinquishMagickMemory(stream_info); \ + ThrowReaderException((exception),(message)); \ +} + char explicit_vr[MaxTextExtent], implicit_vr[MaxTextExtent], @@ -2892,19 +2901,20 @@ static Image *ReadDCMImage(const ImageIn /* Read DCM preamble. */ + data=(unsigned char *) NULL; stream_info=(DCMStreamInfo *) AcquireMagickMemory(sizeof(*stream_info)); if (stream_info == (DCMStreamInfo *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError,"MemoryAllocationFailed"); (void) ResetMagickMemory(stream_info,0,sizeof(*stream_info)); count=ReadBlob(image,128,(unsigned char *) magick); if (count != 128) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); count=ReadBlob(image,4,(unsigned char *) magick); if ((count != 4) || (LocaleNCompare(magick,"DICM",4) != 0)) { offset=SeekBlob(image,0L,SEEK_SET); if (offset < 0) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); } /* Read DCM Medical image. @@ -2971,7 +2981,7 @@ static Image *ReadDCMImage(const ImageIn { offset=SeekBlob(image,(MagickOffsetType) -2,SEEK_CUR); if (offset < 0) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); quantum=4; } else @@ -3066,7 +3076,7 @@ static Image *ReadDCMImage(const ImageIn data=(unsigned char *) AcquireQuantumMemory(length+1,quantum* sizeof(*data)); if (data == (unsigned char *) NULL) - ThrowReaderException(ResourceLimitError, + ThrowDCMReaderException(ResourceLimitError, "MemoryAllocationFailed"); count=ReadBlob(image,(size_t) quantum*length,data); if (count != (ssize_t) (quantum*length)) @@ -3074,7 +3084,7 @@ static Image *ReadDCMImage(const ImageIn (void) FormatLocaleFile(stdout,"count=%d quantum=%d " "length=%d group=%d\n",(int) count,(int) quantum,(int) length,(int) group); - ThrowReaderException(CorruptImageError, + ThrowDCMReaderException(CorruptImageError, "InsufficientImageDataInFile"); } data[length*quantum]='\0'; @@ -3245,7 +3255,7 @@ static Image *ReadDCMImage(const ImageIn bytes_per_pixel=2; depth=bits_allocated; if (depth > 32) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); max_value=(1UL << bits_allocated)-1; break; } @@ -3260,7 +3270,7 @@ static Image *ReadDCMImage(const ImageIn bytes_per_pixel=2; depth=significant_bits; if (depth > 32) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); max_value=(1UL << significant_bits)-1; mask=(size_t) GetQuantumRange(significant_bits); break; @@ -3311,7 +3321,8 @@ static Image *ReadDCMImage(const ImageIn graymap=(int *) AcquireQuantumMemory((size_t) colors, sizeof(*graymap)); if (graymap == (int *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError, + "MemoryAllocationFailed"); for (i=0; i < (ssize_t) colors; i++) if (bytes_per_pixel == 1) graymap[i]=(int) data[i]; @@ -3334,7 +3345,8 @@ static Image *ReadDCMImage(const ImageIn redmap=(int *) AcquireQuantumMemory((size_t) colors, sizeof(*redmap)); if (redmap == (int *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError, + "MemoryAllocationFailed"); p=data; for (i=0; i < (ssize_t) colors; i++) { @@ -3362,7 +3374,8 @@ static Image *ReadDCMImage(const ImageIn greenmap=(int *) AcquireQuantumMemory((size_t) colors, sizeof(*greenmap)); if (greenmap == (int *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError, + "MemoryAllocationFailed"); p=data; for (i=0; i < (ssize_t) colors; i++) { @@ -3390,7 +3403,8 @@ static Image *ReadDCMImage(const ImageIn bluemap=(int *) AcquireQuantumMemory((size_t) colors, sizeof(*bluemap)); if (bluemap == (int *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError, + "MemoryAllocationFailed"); p=data; for (i=0; i < (ssize_t) colors; i++) { @@ -3492,7 +3506,7 @@ static Image *ReadDCMImage(const ImageIn } } if ((width == 0) || (height == 0)) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); image->columns=(size_t) width; image->rows=(size_t) height; if (signed_data == 0xffff) @@ -3532,7 +3546,7 @@ static Image *ReadDCMImage(const ImageIn stream_info->offsets=(ssize_t *) AcquireQuantumMemory( stream_info->offset_count,sizeof(*stream_info->offsets)); if (stream_info->offsets == (ssize_t *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError,"MemoryAllocationFailed"); for (i=0; i < (ssize_t) stream_info->offset_count; i++) stream_info->offsets[i]=(int) ReadBlobLSBLong(image); offset=TellBlob(image); @@ -3570,7 +3584,7 @@ static Image *ReadDCMImage(const ImageIn if (tag == 0xFFFEE0DD) break; /* sequence delimiter tag */ if (tag != 0xFFFEE000) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); file=(FILE *) NULL; unique_file=AcquireUniqueFileResource(filename); if (unique_file != -1) @@ -3632,7 +3646,7 @@ static Image *ReadDCMImage(const ImageIn length=(size_t) (GetQuantumRange(depth)+1); scale=(Quantum *) AcquireQuantumMemory(length,sizeof(*scale)); if (scale == (Quantum *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError,"MemoryAllocationFailed"); range=GetQuantumRange(depth); for (i=0; i <= (ssize_t) GetQuantumRange(depth); i++) scale[i]=ScaleAnyToQuantum((size_t) i,range); @@ -3662,7 +3676,8 @@ static Image *ReadDCMImage(const ImageIn stream_info->offsets=(ssize_t *) AcquireQuantumMemory( stream_info->offset_count,sizeof(*stream_info->offsets)); if (stream_info->offsets == (ssize_t *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError, + "MemoryAllocationFailed"); for (i=0; i < (ssize_t) stream_info->offset_count; i++) stream_info->offsets[i]=(int) ReadBlobLSBLong(image); offset=TellBlob(image); @@ -3687,7 +3702,7 @@ static Image *ReadDCMImage(const ImageIn if (colors == 0) colors=one << depth; if (AcquireImageColormap(image,one << depth) == MagickFalse) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowDCMReaderException(ResourceLimitError,"MemoryAllocationFailed"); if (redmap != (int *) NULL) for (i=0; i < (ssize_t) colors; i++) { @@ -3737,7 +3752,7 @@ static Image *ReadDCMImage(const ImageIn stream_info->remaining=(size_t) ReadBlobLSBLong(image); if ((tag != 0xFFFEE000) || (stream_info->remaining <= 64) || (EOFBlob(image) != MagickFalse)) - ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + ThrowDCMReaderException(CorruptImageError,"ImproperImageHeader"); stream_info->count=0; stream_info->segment_count=ReadBlobLSBLong(image); if (stream_info->segment_count > 1)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor