Package: release.debian.org Severity: normal Tags: jessie User: [email protected] Usertags: pu
Hi SRMs, [coordinated with Bastien, the primary imagemagick maintainer] imagemagick bug #844594 also affects jessie and it's a regression in jessie compared to wheezy. Since there's a steady stream of imagemagick vulnerabilities this would not result in a dedicated jessie update, but I'm rather asking for SRM approval to roll this into the next jessie update along with security fixes. This patch has been running on the jessie-based image scalers of Wikimedia Commons for a few months without further problems. Patch attached. Cheers, Moritz
Description: Fix convert -sharpen with CMYK images Backport of https://github.com/ImageMagick/ImageMagick/commit/b1b4057233710e30d7d68bf8d8a5fcbd0eb7b275 From: Cristy <[email protected]> --- imagemagick-6.8.9.9.orig/magick/morphology.c +++ imagemagick-6.8.9.9/magick/morphology.c @@ -2706,7 +2706,7 @@ static ssize_t MorphologyPrimitive(const */ *q = p[r]; if (image->colorspace == CMYKColorspace) - SetPixelIndex(q_indexes+y,GetPixelIndex(p_indexes+r)); + SetPixelIndex(q_indexes+y,GetPixelIndex(p_indexes+y+r)); /* Set the bias of the weighted average output */ result.red = @@ -2724,7 +2724,7 @@ static ssize_t MorphologyPrimitive(const */ k = &kernel->values[ kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+y; if ( ((channel & SyncChannels) == 0 ) || (image->matte == MagickFalse) ) { /* No 'Sync' involved. @@ -2804,7 +2804,7 @@ static ssize_t MorphologyPrimitive(const || ( p[r].blue != GetPixelBlue(q)) || ( p[r].opacity != GetPixelOpacity(q)) || ( image->colorspace == CMYKColorspace && - GetPixelIndex(p_indexes+r) != GetPixelIndex(q_indexes+y) ) ) + (GetPixelIndex(p_indexes+y+r) != GetPixelIndex(q_indexes+y))) ) changes[id]++; p++; q++; @@ -2907,7 +2907,7 @@ static ssize_t MorphologyPrimitive(const */ *q = p[r]; if (image->colorspace == CMYKColorspace) - SetPixelIndex(q_indexes+x,GetPixelIndex(p_indexes+r)); + SetPixelIndex(q_indexes+x,GetPixelIndex(p_indexes+x+r)); /* Defaults */ min.red = @@ -2927,7 +2927,7 @@ static ssize_t MorphologyPrimitive(const result.opacity = QuantumRange - (double) p[r].opacity; result.index = 0.0; if ( image->colorspace == CMYKColorspace) - result.index = (double) GetPixelIndex(p_indexes+r); + result.index = (double) GetPixelIndex(p_indexes+x+r); switch (method) { case ConvolveMorphology: @@ -2969,7 +2969,7 @@ static ssize_t MorphologyPrimitive(const */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; if ( ((channel & SyncChannels) == 0 ) || (image->matte == MagickFalse) ) { /* No 'Sync' involved. @@ -3056,7 +3056,7 @@ static ssize_t MorphologyPrimitive(const */ k = kernel->values; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k++) { if ( IsNaN(*k) || (*k) < 0.5 ) continue; @@ -3087,7 +3087,7 @@ static ssize_t MorphologyPrimitive(const */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) || (*k) < 0.5 ) continue; @@ -3121,7 +3121,7 @@ static ssize_t MorphologyPrimitive(const */ k = kernel->values; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k++) { if ( IsNaN(*k) ) continue; @@ -3170,7 +3170,7 @@ static ssize_t MorphologyPrimitive(const */ k = kernel->values; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k++) { if ( IsNaN(*k) || (*k) < 0.5 ) continue; @@ -3201,7 +3201,7 @@ static ssize_t MorphologyPrimitive(const */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) || (*k) < 0.5 ) continue; /* boolean kernel */ @@ -3244,7 +3244,7 @@ static ssize_t MorphologyPrimitive(const */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) ) continue; @@ -3253,8 +3253,7 @@ static ssize_t MorphologyPrimitive(const Minimize(result.blue, (*k)+k_pixels[u].blue); Minimize(result.opacity, (*k)+QuantumRange-k_pixels[u].opacity); if ( image->colorspace == CMYKColorspace) - Minimize(result.index,(*k)+GetPixelIndex( - k_indexes+u)); + Minimize(result.index,(*k)+GetPixelIndex(k_indexes+u)); } k_pixels += virt_width; k_indexes += virt_width; @@ -3328,7 +3327,7 @@ static ssize_t MorphologyPrimitive(const || ( p[r].blue != GetPixelBlue(q) ) || ( p[r].opacity != GetPixelOpacity(q) ) || ( image->colorspace == CMYKColorspace && - GetPixelIndex(p_indexes+r) != GetPixelIndex(q_indexes+x) ) ) + (GetPixelIndex(p_indexes+x+r) != GetPixelIndex(q_indexes+x))) ) changes[id]++; p++; q++; @@ -3502,7 +3501,7 @@ static ssize_t MorphologyPrimitiveDirect /* Add kernel Value and select the minimum value found. */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v <= (ssize_t) offy; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) ) continue; @@ -3541,7 +3540,7 @@ static ssize_t MorphologyPrimitiveDirect */ k = &kernel->values[ kernel->width*kernel->height-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=0; v <= (ssize_t) offy; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) ) continue; @@ -3599,7 +3598,7 @@ static ssize_t MorphologyPrimitiveDirect || ( p[r].blue != GetPixelBlue(q) ) || ( p[r].opacity != GetPixelOpacity(q) ) || ( image->colorspace == CMYKColorspace && - GetPixelIndex(p_indexes+r) != GetPixelIndex(q_indexes+x) ) ) + (GetPixelIndex(p_indexes+x+r) != GetPixelIndex(q_indexes+x))) ) changed++; /* The pixel was changed in some way! */ p++; /* increment pixel buffers */ @@ -3694,7 +3693,7 @@ static ssize_t MorphologyPrimitiveDirect /* Add kernel Value and select the minimum value found. */ k = &kernel->values[ kernel->width*(kernel->y+1)-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=offy; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) ) continue; @@ -3731,7 +3730,7 @@ static ssize_t MorphologyPrimitiveDirect */ k = &kernel->values[ kernel->width*(kernel->y+1)-1 ]; k_pixels = p; - k_indexes = p_indexes; + k_indexes = p_indexes+x; for (v=offy; v < (ssize_t) kernel->height; v++) { for (u=0; u < (ssize_t) kernel->width; u++, k--) { if ( IsNaN(*k) ) continue; @@ -3789,7 +3788,7 @@ static ssize_t MorphologyPrimitiveDirect || ( p[r].blue != GetPixelBlue(q) ) || ( p[r].opacity != GetPixelOpacity(q) ) || ( image->colorspace == CMYKColorspace && - GetPixelIndex(p_indexes+r) != GetPixelIndex(q_indexes+x) ) ) + (GetPixelIndex(p_indexes+x+r) != GetPixelIndex(q_indexes+x))) ) changed++; /* The pixel was changed in some way! */ p--; /* go backward through pixel buffers */

