diff -Nru imagemagick-6.8.9.9/debian/changelog imagemagick-6.8.9.9/debian/changelog --- imagemagick-6.8.9.9/debian/changelog 2016-01-17 12:45:14.000000000 -0800 +++ imagemagick-6.8.9.9/debian/changelog 2016-02-25 11:26:06.000000000 -0800 @@ -1,3 +1,11 @@ +imagemagick (8:6.8.9.9-7ubuntu1) xenial; urgency=medium + + * Add backport of d6054824 and 95c8394e to + 0070-Fix-PixelColor-off-by-one-on-i386.patch + (LP: #1549942, closes: #811308). + + -- Nishanth Aravamudan Thu, 25 Feb 2016 09:11:02 -0800 + imagemagick (8:6.8.9.9-7) unstable; urgency=low * Fix various minor security issues diff -Nru imagemagick-6.8.9.9/debian/patches/0070-Fix-PixelColor-off-by-one-on-i386.patch imagemagick-6.8.9.9/debian/patches/0070-Fix-PixelColor-off-by-one-on-i386.patch --- imagemagick-6.8.9.9/debian/patches/0070-Fix-PixelColor-off-by-one-on-i386.patch 2016-01-17 12:45:18.000000000 -0800 +++ imagemagick-6.8.9.9/debian/patches/0070-Fix-PixelColor-off-by-one-on-i386.patch 2016-02-25 10:56:04.000000000 -0800 @@ -11,11 +11,11 @@ magick/identify.c | 26 ++++++++++++++------------ 4 files changed, 75 insertions(+), 41 deletions(-) -diff --git a/coders/jpeg.c b/coders/jpeg.c -index d1310f6..2c963bb 100644 ---- a/coders/jpeg.c -+++ b/coders/jpeg.c -@@ -1668,7 +1668,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +Index: gitwd/coders/jpeg.c +=================================================================== +--- gitwd.orig/coders/jpeg.c ++++ gitwd/coders/jpeg.c +@@ -1668,7 +1668,7 @@ static QuantizationTable *GetQuantizatio if (description == (XMLTreeInfo *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -24,7 +24,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); xml=DestroyString(xml); return(table); -@@ -1677,7 +1677,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1677,7 +1677,7 @@ static QuantizationTable *GetQuantizatio if (levels == (XMLTreeInfo *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -33,7 +33,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); xml=DestroyString(xml); return(table); -@@ -1699,7 +1699,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1699,7 +1699,7 @@ static QuantizationTable *GetQuantizatio if (attribute == (char *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -42,7 +42,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1709,7 +1709,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1709,7 +1709,7 @@ static QuantizationTable *GetQuantizatio if (table->width == 0) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -51,7 +51,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1719,7 +1719,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1719,7 +1719,7 @@ static QuantizationTable *GetQuantizatio if (attribute == (char *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -60,7 +60,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1729,7 +1729,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1729,7 +1729,7 @@ static QuantizationTable *GetQuantizatio if (table->height == 0) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -69,7 +69,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1739,7 +1739,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1739,7 +1739,7 @@ static QuantizationTable *GetQuantizatio if (attribute == (char *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -78,7 +78,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1749,7 +1749,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1749,7 +1749,7 @@ static QuantizationTable *GetQuantizatio if (table->divisor == 0.0) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -87,7 +87,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1759,7 +1759,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1759,7 +1759,7 @@ static QuantizationTable *GetQuantizatio if (content == (char *) NULL) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -96,7 +96,7 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -@@ -1788,7 +1788,7 @@ static QuantizationTable *GetQuantizationTable(const char *filename, +@@ -1788,7 +1788,7 @@ static QuantizationTable *GetQuantizatio if (p != content) { (void) ThrowMagickException(exception,GetMagickModule(),OptionError, @@ -105,11 +105,11 @@ quantization_tables=DestroyXMLTree(quantization_tables); table=DestroyQuantizationTable(table); xml=DestroyString(xml); -diff --git a/magick/cache.c b/magick/cache.c -index 129b769..c34f62c 100644 ---- a/magick/cache.c -+++ b/magick/cache.c -@@ -3420,6 +3420,11 @@ static inline MagickOffsetType WritePixelCacheRegion( +Index: gitwd/magick/cache.c +=================================================================== +--- gitwd.orig/magick/cache.c ++++ gitwd/magick/cache.c +@@ -3420,6 +3420,11 @@ static inline MagickOffsetType WritePixe const CacheInfo *restrict cache_info,const MagickOffsetType offset, const MagickSizeType length,const unsigned char *restrict buffer) { @@ -121,7 +121,7 @@ register MagickOffsetType i; -@@ -3427,6 +3432,9 @@ static inline MagickOffsetType WritePixelCacheRegion( +@@ -3427,6 +3432,9 @@ static inline MagickOffsetType WritePixe count; #if !defined(MAGICKCORE_HAVE_PWRITE) @@ -131,7 +131,7 @@ if (lseek(cache_info->file,offset,SEEK_SET) < 0) return((MagickOffsetType) -1); #endif -@@ -3447,6 +3455,10 @@ static inline MagickOffsetType WritePixelCacheRegion( +@@ -3447,6 +3455,10 @@ static inline MagickOffsetType WritePixe break; } } @@ -142,7 +142,7 @@ return(i); } -@@ -3479,9 +3491,13 @@ static MagickBooleanType SetPixelCacheExtent(Image *image,MagickSizeType length) +@@ -3479,9 +3491,13 @@ static MagickBooleanType SetPixelCacheEx if (offset < 0) return(MagickFalse); if ((MagickSizeType) offset >= length) @@ -159,7 +159,7 @@ #if defined(MAGICKCORE_HAVE_POSIX_FALLOCATE) if (cache_info->synchronize != MagickFalse) { -@@ -4173,6 +4189,11 @@ static inline MagickOffsetType ReadPixelCacheRegion( +@@ -4173,6 +4189,11 @@ static inline MagickOffsetType ReadPixel const CacheInfo *restrict cache_info,const MagickOffsetType offset, const MagickSizeType length,unsigned char *restrict buffer) { @@ -171,7 +171,7 @@ register MagickOffsetType i; -@@ -4180,6 +4201,9 @@ static inline MagickOffsetType ReadPixelCacheRegion( +@@ -4180,6 +4201,9 @@ static inline MagickOffsetType ReadPixel count; #if !defined(MAGICKCORE_HAVE_PREAD) @@ -181,7 +181,7 @@ if (lseek(cache_info->file,offset,SEEK_SET) < 0) return((MagickOffsetType) -1); #endif -@@ -4187,11 +4211,11 @@ static inline MagickOffsetType ReadPixelCacheRegion( +@@ -4187,11 +4211,11 @@ static inline MagickOffsetType ReadPixel for (i=0; i < (MagickOffsetType) length; i+=count) { #if !defined(MAGICKCORE_HAVE_PREAD) @@ -197,7 +197,7 @@ #endif if (count <= 0) { -@@ -4200,6 +4224,10 @@ static inline MagickOffsetType ReadPixelCacheRegion( +@@ -4200,6 +4224,10 @@ static inline MagickOffsetType ReadPixel break; } } @@ -208,7 +208,7 @@ return(i); } -@@ -4392,8 +4420,10 @@ static MagickBooleanType ReadPixelCachePixels(CacheInfo *restrict cache_info, +@@ -4392,8 +4420,10 @@ static MagickBooleanType ReadPixelCacheP if (nexus_info->authentic_pixel_cache != MagickFalse) return(MagickTrue); @@ -221,26 +221,29 @@ length=(MagickSizeType) nexus_info->region.width*sizeof(PixelPacket); rows=nexus_info->region.height; extent=length*rows; -diff --git a/magick/color.c b/magick/color.c -index db9d039..12fdffe 100644 ---- a/magick/color.c -+++ b/magick/color.c -@@ -2731,18 +2731,20 @@ MagickExport MagickBooleanType QueryMagickColorCompliance(const char *name, +Index: gitwd/magick/color.c +=================================================================== +--- gitwd.orig/magick/color.c ++++ gitwd/magick/color.c +@@ -2729,20 +2729,22 @@ MagickExport MagickBooleanType QueryMagi + else + { if ((flags & PercentValue) != 0) - scale=(MagickRealType) (QuantumRange/100.0); +- scale=(MagickRealType) (QuantumRange/100.0); ++ scale=(double) (QuantumRange/100.0); if ((flags & RhoValue) != 0) - color->red=(MagickRealType) ClampToQuantum(scale*geometry_info.rho); + color->red=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.rho)); ++ scale*geometry_info.rho); if ((flags & SigmaValue) != 0) - color->green=(MagickRealType) ClampToQuantum(scale* - geometry_info.sigma); + color->green=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.sigma)); ++ scale*geometry_info.sigma); if ((flags & XiValue) != 0) - color->blue=(MagickRealType) ClampToQuantum(scale*geometry_info.xi); + color->blue=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.xi)); ++ scale*geometry_info.xi); color->opacity=(MagickRealType) OpaqueOpacity; if ((flags & PsiValue) != 0) { @@ -248,31 +251,31 @@ - color->index=(MagickRealType) ClampToQuantum(scale* - geometry_info.psi); + color->index=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.psi)); ++ scale*geometry_info.psi); else if (color->matte != MagickFalse) color->opacity=(MagickRealType) ClampToQuantum( -@@ -2755,11 +2757,11 @@ MagickExport MagickBooleanType QueryMagickColorCompliance(const char *name, +@@ -2755,11 +2757,11 @@ MagickExport MagickBooleanType QueryMagi if (color->colorspace == LabColorspace) { if ((flags & SigmaValue) != 0) - color->green=(MagickRealType) ClampToQuantum(scale* - geometry_info.sigma+(QuantumRange+1)/2.0); + color->green=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.sigma+(QuantumRange+1)/2.0)); ++ scale*geometry_info.sigma+(QuantumRange+1)/2.0); if ((flags & XiValue) != 0) - color->blue=(MagickRealType) ClampToQuantum(scale* - geometry_info.xi+(QuantumRange+1)/2.0); + color->blue=(MagickRealType) ClampToQuantum((MagickRealType) -+ floor(scale*geometry_info.xi+(QuantumRange+1)/2.0)); ++ scale*geometry_info.xi+(QuantumRange+1)/2.0); } if (LocaleCompare(colorspace,"gray") == 0) { -diff --git a/magick/identify.c b/magick/identify.c -index 2a9ed92..8a3bd7b 100644 ---- a/magick/identify.c -+++ b/magick/identify.c -@@ -455,11 +455,13 @@ static ssize_t PrintChannelStatistics(FILE *file,const ChannelType channel, +Index: gitwd/magick/identify.c +=================================================================== +--- gitwd.orig/magick/identify.c ++++ gitwd/magick/identify.c +@@ -455,11 +455,13 @@ static ssize_t PrintChannelStatistics(FI if (channel == AlphaChannel) { @@ -282,16 +285,16 @@ - ClampToQuantum(scale*(QuantumRange-channel_statistics[channel].minima)), - (QuantumRange-channel_statistics[channel].minima)/(double) QuantumRange, + n=FormatLocaleFile(file,StatisticsFormat,name,ClampToQuantum( -+ (MagickRealType) floor(scale*(QuantumRange- ++ (MagickRealType) (scale*(QuantumRange- + channel_statistics[channel].maxima))),(QuantumRange- + channel_statistics[channel].maxima)/(double) QuantumRange, -+ ClampToQuantum((MagickRealType) floor(scale*(QuantumRange- ++ ClampToQuantum((MagickRealType) (scale*(QuantumRange- + channel_statistics[channel].minima))),(QuantumRange- + channel_statistics[channel].minima)/(double) QuantumRange, scale*(QuantumRange-channel_statistics[channel].mean),(QuantumRange- channel_statistics[channel].mean)/(double) QuantumRange,scale* channel_statistics[channel].standard_deviation, -@@ -468,13 +470,13 @@ static ssize_t PrintChannelStatistics(FILE *file,const ChannelType channel, +@@ -468,13 +470,13 @@ static ssize_t PrintChannelStatistics(FI channel_statistics[channel].skewness); return(n); } @@ -303,7 +306,7 @@ - channel_statistics[channel].mean/(double) QuantumRange,scale* - channel_statistics[channel].standard_deviation, + n=FormatLocaleFile(file,StatisticsFormat,name,ClampToQuantum((MagickRealType) -+ floor(scale*channel_statistics[channel].minima)), ++ (scale*channel_statistics[channel].minima)), + channel_statistics[channel].minima/(double) QuantumRange,ClampToQuantum( + (MagickRealType) (scale*channel_statistics[channel].maxima)), + channel_statistics[channel].maxima/(double) QuantumRange,scale*