[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: