Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP2
ImageMagick.17344
ImageMagick-CVE-2018-16642.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ImageMagick-CVE-2018-16642.patch of Package ImageMagick.17344
Index: ImageMagick-7.0.7-34/coders/cut.c =================================================================== --- ImageMagick-7.0.7-34.orig/coders/cut.c 2018-05-20 17:55:43.000000000 +0200 +++ ImageMagick-7.0.7-34/coders/cut.c 2018-09-11 11:45:06.704448187 +0200 @@ -95,132 +95,165 @@ typedef struct } CUTPalHeader; -static void InsertRow(Image *image,ssize_t depth,unsigned char *p,ssize_t y, +static MagickBooleanType InsertRow(Image *image,ssize_t bpp,unsigned char *p,ssize_t y, ExceptionInfo *exception) { - size_t bit; ssize_t x; - register Quantum *q; - Quantum index; - - index=0; - switch (depth) - { + int + bit; + + Quantum + index; + + register Quantum + *q; + + ssize_t + x; + + q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); + if (q == (Quantum *) NULL) + return(MagickFalse); + switch (bpp) + { case 1: /* Convert bitmap scanline. */ { - q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); - if (q == (Quantum *) NULL) - break; for (x=0; x < ((ssize_t) image->columns-7); x+=8) { for (bit=0; bit < 8; bit++) { - index=(Quantum) ((((*p) & (0x80 >> bit)) != 0) ? 0x01 : 0x00); + index=((*p) & (0x80 >> bit) ? 0x01 : 0x00); SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); q+=GetPixelChannels(image); } p++; } if ((image->columns % 8) != 0) { - for (bit=0; bit < (image->columns % 8); bit++) - { - index=(Quantum) ((((*p) & (0x80 >> bit)) != 0) ? 0x01 : 0x00); - SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); - } + for (bit=0; bit < (ssize_t) (image->columns % 8); bit++) + { + index=((*p) & (0x80 >> bit) ? 0x01 : 0x00); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + q+=GetPixelChannels(image); + } p++; } - (void) SyncAuthenticPixels(image,exception); break; } case 2: /* Convert PseudoColor scanline. */ { - q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); - if (q == (Quantum *) NULL) - break; - for (x=0; x < ((ssize_t) image->columns-1); x+=2) + for (x=0; x < ((ssize_t) image->columns-3); x+=4) { - index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception); - SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); - index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception); - SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); - index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,exception); - SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); - index=ConstrainColormapIndex(image,(*p) & 0x3,exception); - SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); - p++; + index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + q+=GetPixelChannels(image); + index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + q+=GetPixelChannels(image); + index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,exception); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + q+=GetPixelChannels(image); + index=ConstrainColormapIndex(image,(*p) & 0x3,exception); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + q+=GetPixelChannels(image); + p++; } - if ((image->columns % 4) != 0) + if ((image->columns % 4) != 0) { index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception); SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); q+=GetPixelChannels(image); - if ((image->columns % 4) >= 1) - + if ((image->columns % 4) > 1) { index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception); SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); q+=GetPixelChannels(image); - if ((image->columns % 4) >= 2) - + if ((image->columns % 4) > 2) { index=ConstrainColormapIndex(image,(*p >> 2) & 0x3, exception); SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) + index,q); q+=GetPixelChannels(image); } } p++; } - (void) SyncAuthenticPixels(image,exception); break; } case 4: /* Convert PseudoColor scanline. */ { - q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); - if (q == (Quantum *) NULL) - break; for (x=0; x < ((ssize_t) image->columns-1); x+=2) - { - index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception); + { + index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception); SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); q+=GetPixelChannels(image); - index=ConstrainColormapIndex(image,(*p) & 0xf,exception); + index=ConstrainColormapIndex(image,(*p) & 0x0f,exception); SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); p++; + q+=GetPixelChannels(image); } if ((image->columns % 2) != 0) { - index=ConstrainColormapIndex(image,(*p >> 4) & 0xf,exception); + index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception); SetPixelIndex(image,index,q); - q+=GetPixelChannels(image); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); p++; + q+=GetPixelChannels(image); } - (void) SyncAuthenticPixels(image,exception); break; } case 8: /* Convert PseudoColor scanline. */ { - q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); - if (q == (Quantum *) NULL) - break; for (x=0; x < (ssize_t) image->columns; x++) + { + index=ConstrainColormapIndex(image,*p,exception); + SetPixelIndex(image,index,q); + if (index < image->colors) + SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); + p++; + q+=GetPixelChannels(image); + } + } + break; + + case 24: /* Convert DirectColor scanline. */ + for (x=0; x < (ssize_t) image->columns; x++) { - index=ConstrainColormapIndex(image,*p,exception); - SetPixelIndex(image,index,q); - p++; + SetPixelRed(image,ScaleCharToQuantum(*p++),q); + SetPixelGreen(image,ScaleCharToQuantum(*p++),q); + SetPixelBlue(image,ScaleCharToQuantum(*p++),q); q+=GetPixelChannels(image); } - (void) SyncAuthenticPixels(image,exception); - break; - } + break; } + if (!SyncAuthenticPixels(image,exception)) + return(MagickFalse); + return(MagickTrue); } /*
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