Hello,

I encountered a warning when I use GCC 15.

==========================
libgcrypt/cipher/cipher-gcm.c: In function 'do_ghash_buf.constprop':
libgcrypt/cipher/cipher-gcm.c:764:23: warning: array subscript 17 is above 
array bounds of 'unsigned char[16]' [-Warray-bounds=]
  764 |               memset (&c->u_mode.gcm.macbuf[unused], 0, n);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
==========================

It's not the case actually.  The size_t type of n (unsigned) might be
the cause of confusion, I suppose.

To silence the warning, I tried this patch:
==========================
diff --git a/cipher/cipher-gcm.c b/cipher/cipher-gcm.c
index 5bb98015..ef657742 100644
--- a/cipher/cipher-gcm.c
+++ b/cipher/cipher-gcm.c
@@ -753,14 +753,12 @@ do_ghash_buf(gcry_cipher_hd_t c, byte *hash, const byte 
*buf,
         }
       if (!buflen)
         {
-          if (!do_padding && unused < blocksize)
+         if (unused < blocksize)
            {
-             break;
-           }
+              if (!do_padding)
+                break;
 
-         n = blocksize - unused;
-         if (n > 0)
-           {
+              n = blocksize - unused;
              memset (&c->u_mode.gcm.macbuf[unused], 0, n);
              unused = blocksize;
            }
==========================

That is, new code will be following:
==========================
      if (!buflen)
        {
          if (unused < blocksize)
            {
              if (!do_padding)
                break;

              n = blocksize - unused;
              memset (&c->u_mode.gcm.macbuf[unused], 0, n);
              unused = blocksize;
            }
        }
==========================

I think that new code has clean semantics and read easier (computing
N only when the condition holds).

Any suggestions are welcome.
-- 

_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to