[gimp] plug-ins: fix crash in DDS loader when one of the masks is zero.



commit 045c3d3208c135d266a818be807253055f274655
Author: Jacob Boerema <jgboerema gmail com>
Date:   Mon May 2 14:55:46 2022 -0400

    plug-ins: fix crash in DDS loader when one of the masks is zero.

 plug-ins/file-dds/ddsread.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/plug-ins/file-dds/ddsread.c b/plug-ins/file-dds/ddsread.c
index 5f89923f57..a57e57bdda 100644
--- a/plug-ins/file-dds/ddsread.c
+++ b/plug-ins/file-dds/ddsread.c
@@ -1175,7 +1175,7 @@ load_layer (FILE             *fp,
                       if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS)
                         pixels[pos + 3] = (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask;
                     }
-                  else
+                  else if (d->rmask > 0 && d->gmask > 0 && d->bmask > 0)
                     {
                       pixels[pos] =
                         (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask;
@@ -1183,10 +1183,13 @@ load_layer (FILE             *fp,
                         (pixel >> d->gshift << (8 - d->gbits) & d->gmask) * 255 / d->gmask;
                       pixels[pos + 2] =
                         (pixel >> d->bshift << (8 - d->bbits) & d->bmask) * 255 / d->bmask;
-                      if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS)
+                      if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS && d->bpp == 4)
                         {
-                          pixels[pos + 3] =
-                            (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask;
+                          if (d->amask > 0)
+                            pixels[pos + 3] =
+                              (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask;
+                          else
+                            pixels[pos + 3] = 255;
                         }
                     }
                 }


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