color_cielab_to_rgb(): reject images with components of different dimensions to void...
authorEven Rouault <even.rouault@spatialys.com>
Sat, 29 Jul 2017 15:56:12 +0000 (17:56 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Sat, 29 Jul 2017 15:56:12 +0000 (17:56 +0200)
src/bin/common/color.c

index 6c74bf318cf88b05ca04c245c3ddde2b232647e7..8bb96043df7b1a07be2dc8c1e0ee2f0d395b7b76 100644 (file)
@@ -781,6 +781,18 @@ fails3:
     }
 }/* color_apply_icc_profile() */
 
+static int are_comps_same_dimensions(opj_image_t * image)
+{
+    unsigned int i;
+    for (i = 1; i < image->numcomps; i++) {
+        if (image->comps[0].dx != image->comps[i].dx ||
+                image->comps[0].dy != image->comps[i].dy) {
+            return OPJ_FALSE;
+        }
+    }
+    return OPJ_TRUE;
+}
+
 void color_cielab_to_rgb(opj_image_t *image)
 {
     int *row;
@@ -794,6 +806,12 @@ void color_cielab_to_rgb(opj_image_t *image)
                 __FILE__, __LINE__, numcomps);
         return;
     }
+    if (!are_comps_same_dimensions(image)) {
+        fprintf(stderr,
+                "%s:%d:\n\tcomponents are not all of the same dimension. Quitting.\n",
+                __FILE__, __LINE__);
+        return;
+    }
 
     row = (int*)image->icc_profile_buf;
     enumcs = row[0];