diff --unified --recursive --text --new-file --color gimp-2.10.30.old/plug-ins/file-psd/psd-load.c gimp-2.10.30/plug-ins/file-psd/psd-load.c
--- gimp-2.10.30.old/plug-ins/file-psd/psd-load.c	2021-12-20 04:48:34.000000000 +0800
+++ gimp-2.10.30/plug-ins/file-psd/psd-load.c	2026-03-23 18:13:43.846999456 +0800
@@ -1862,14 +1862,13 @@
   guint16               bps;
   guint16              *rle_pack_len[MAX_CHANNELS];
   guint32               alpha_id;
-  gint32                layer_size;
+  gsize                 layer_size;
   gint32                layer_id = -1;
   gint32                channel_id = -1;
   gint16                alpha_opacity;
   gint                  cidx;                  /* Channel index */
   gint                  rowi;                  /* Row index */
   gint                  offset;
-  gint                  i;
   gboolean              alpha_visible;
   gboolean              alpha_channel = FALSE;
   GeglBuffer           *buffer;
@@ -2018,11 +2017,11 @@
       image_type = get_gimp_image_type (img_a->base_type,
                                         img_a->transparency || alpha_channel);
 
-      layer_size = img_a->columns * img_a->rows;
+      layer_size = (gsize) img_a->columns * img_a->rows;
       pixels = g_malloc (layer_size * base_channels * bps);
       for (cidx = 0; cidx < base_channels; ++cidx)
         {
-          for (i = 0; i < layer_size; ++i)
+          for (gint64 i = 0; i < layer_size; ++i)
             {
               memcpy (&pixels[((i * base_channels) + cidx) * bps],
                       &chn_a[cidx].data[i * bps], bps);
@@ -2079,7 +2078,7 @@
             {
               gfloat *data = iter->items[0].data;
 
-              for (i = 0; i < iter->length; i++)
+              for (gint i = 0; i < iter->length; i++)
                 {
                   gint c;
 
@@ -2131,7 +2130,7 @@
 
       /* Draw channels */
       IFDBG(2) g_debug ("Number of channels: %d", extra_channels);
-      for (i = 0; i < extra_channels; ++i)
+      for (gint i = 0; i < extra_channels; ++i)
         {
           /* Alpha channel name */
           alpha_name = NULL;
@@ -2172,8 +2171,8 @@
             }
 
           cidx = base_channels + i;
-          pixels = g_realloc (pixels, chn_a[cidx].columns * chn_a[cidx].rows * bps);
-          memcpy (pixels, chn_a[cidx].data, chn_a[cidx].columns * chn_a[cidx].rows * bps);
+          pixels = g_realloc (pixels, (gsize) chn_a[cidx].columns * chn_a[cidx].rows * bps);
+          memcpy (pixels, chn_a[cidx].data, (gsize) chn_a[cidx].columns * chn_a[cidx].rows * bps);
           channel_id = gimp_channel_new (image_id, alpha_name,
                                          chn_a[cidx].columns, chn_a[cidx].rows,
                                          alpha_opacity, &alpha_rgb);
@@ -2315,7 +2314,6 @@
   gchar    *raw_data;
   gchar    *src;
   guint32   readline_len;
-  gint      i, j;
 
   if (bps == 1)
     readline_len = ((channel->columns + 7) / 8);
@@ -2334,7 +2332,7 @@
       return -1;
     }
 
-  raw_data = g_malloc (readline_len * channel->rows);
+  raw_data = g_malloc (readline_len * (gsize) channel->rows);
   switch (compression)
     {
       case PSD_COMP_RAW:
@@ -2346,7 +2344,7 @@
         break;
 
       case PSD_COMP_RLE:
-        for (i = 0; i < channel->rows; ++i)
+        for (gint i = 0; i < channel->rows; ++i)
           {
             src = gegl_scratch_alloc (rle_pack_len[i]);
 /*      FIXME check for over-run
@@ -2416,13 +2414,13 @@
         channel->data = raw_data;
         raw_data      = NULL;
 
-        for (i = 0; i < channel->rows * channel->columns; ++i)
+        for (gsize i = 0; i < (gsize) channel->rows * channel->columns; ++i)
           data[i] = GUINT32_FROM_BE (data[i]);
 
         if (compression == PSD_COMP_ZIP_PRED)
           {
-            for (i = 0; i < channel->rows; ++i)
-              for (j = 1; j < channel->columns; ++j)
+            for (gsize i = 0; i < channel->rows; ++i)
+              for (gsize j = 1; j < channel->columns; ++j)
                 data[i * channel->columns + j] += data[i * channel->columns + j - 1];
           }
         break;
@@ -2435,13 +2433,13 @@
         channel->data = raw_data;
         raw_data      = NULL;
 
-        for (i = 0; i < channel->rows * channel->columns; ++i)
+        for (gsize i = 0; i < (gsize) channel->rows * channel->columns; ++i)
           data[i] = GUINT16_FROM_BE (data[i]);
 
         if (compression == PSD_COMP_ZIP_PRED)
           {
-            for (i = 0; i < channel->rows; ++i)
-              for (j = 1; j < channel->columns; ++j)
+            for (gsize i = 0; i < channel->rows; ++i)
+              for (gsize j = 1; j < channel->columns; ++j)
                 data[i * channel->columns + j] += data[i * channel->columns + j - 1];
           }
         break;
@@ -2453,14 +2451,14 @@
 
         if (compression == PSD_COMP_ZIP_PRED)
           {
-            for (i = 0; i < channel->rows; ++i)
-              for (j = 1; j < channel->columns; ++j)
+            for (gsize i = 0; i < channel->rows; ++i)
+              for (gsize j = 1; j < channel->columns; ++j)
                 channel->data[i * channel->columns + j] += channel->data[i * channel->columns + j - 1];
           }
         break;
 
       case 1:
-        channel->data = (gchar *) g_malloc (channel->rows * channel->columns);
+        channel->data = (gchar *) g_malloc ((gsize) channel->rows * channel->columns);
         convert_1_bit (raw_data, channel->data, channel->rows, channel->columns);
         break;
 
@@ -2484,18 +2482,17 @@
    Rows are padded out to a byte boundary.
 */
   guint32 row_pos = 0;
-  gint    i, j;
 
   IFDBG(3)  g_debug ("Start 1 bit conversion");
 
-  for (i = 0; i < rows * ((columns + 7) / 8); ++i)
+  for (gsize i = 0; i < (gsize) rows * ((columns + 7) / 8); ++i)
     {
       guchar    mask = 0x80;
-      for (j = 0; j < 8 && row_pos < columns; ++j)
+      for (gint j = 0; j < 8 && row_pos < columns; ++j)
         {
           *dst = (*src & mask) ? 0 : 1;
           IFDBG(3) g_debug ("byte %d, bit %d, offset %d, src %d, dst %d",
-            i , j, row_pos, *src, *dst);
+                            (gint) i , j, row_pos, *src, *dst);
           dst++;
           mask >>= 1;
           row_pos++;
