Commit c517d9c4 for libheif

commit c517d9c407cf30275e4c7aaa5e5db03f70550550
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Thu Mar 5 19:08:02 2026 +0100

    fix reading mask imags with 16 bpp

diff --git a/libheif/image-items/mask_image.cc b/libheif/image-items/mask_image.cc
index 1dca27e0..5492304d 100644
--- a/libheif/image-items/mask_image.cc
+++ b/libheif/image-items/mask_image.cc
@@ -92,7 +92,9 @@ Error MaskImageCodec::decode_mask_image(const HeifContext* context,
                  "Unsupported bit depth for mask item");
   }

-  if (data.size() / width < height) {
+  uint32_t bytes_per_pixel = (mskC->get_bits_per_pixel() + 7) / 8;
+
+  if (data.size() / (static_cast<size_t>(width) * bytes_per_pixel) < height) {
     return {heif_error_Invalid_input,
             heif_suberror_Unspecified,
             "Mask image data is too short"};
@@ -108,14 +110,14 @@ Error MaskImageCodec::decode_mask_image(const HeifContext* context,

   size_t stride;
   uint8_t* dst = img->get_plane(heif_channel_Y, &stride);
-  if (stride == static_cast<size_t>(width)) {
-    memcpy(dst, data.data(), static_cast<size_t>(width) * height);
+  if (stride == static_cast<size_t>(width) * bytes_per_pixel) {
+    memcpy(dst, data.data(), static_cast<size_t>(width) * bytes_per_pixel * height);
   }
   else
   {
     for (size_t i = 0; i < height; i++)
     {
-      memcpy(dst + i * stride, data.data() + i * width, width);
+      memcpy(dst + i * stride, data.data() + i * width * bytes_per_pixel, width * bytes_per_pixel);
     }
   }
   return Error::Ok;