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

Bug#856639: marked as done (jessie-pu: package imagemagick)



Your message dated Fri, 28 Apr 2017 19:01:02 +0100
with message-id <1493402462.1976.11.camel@adam-barratt.org.uk>
and subject line Re: Bug#856639: jessie-pu: package imagemagick
has caused the Debian Bug report #856639,
regarding jessie-pu: package imagemagick
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
856639: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=856639
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
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 */

--- End Message ---
--- Begin Message ---
On Thu, 2017-04-13 at 21:37 +0200, Salvatore Bonaccorso wrote:
> The patch has been included in the last DSA for imagemagick, versioned
> 8:6.8.9.9-5+deb8u8.

Therefore closing the p-u bug; thanks.

Regards,

Adam

--- End Message ---

Reply to: