Bug#856639: jessie-pu: package imagemagick
Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian.org@packages.debian.org
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 <urban-warrior@imagemagick.org>
--- 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 */
Reply to: