]> Savannah Git Hosting - gnulib.git/commitdiff
file-has-acl: fix recently-introduced NFSv4 bug
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 28 Dec 2022 04:00:58 +0000 (20:00 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 28 Dec 2022 04:01:33 +0000 (20:01 -0800)
* lib/file-has-acl.c (acl_nfs4_nontrivial): Fix off-by-one
error when rounding WHOLEN up to next multiple of 4.
Pacify GCC 12.2.1 -Wcast-align.

ChangeLog
lib/file-has-acl.c

index 12c14a2e7a517f96e3d0518e8d1be4c37eadea81..be0fb22078c48595430075bd29990f290b4e8300 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2022-12-27  Paul Eggert  <eggert@cs.ucla.edu>
 
+       file-has-acl: fix recently-introduced NFSv4 bug
+       * lib/file-has-acl.c (acl_nfs4_nontrivial): Fix off-by-one
+       error when rounding WHOLEN up to next multiple of 4.
+       Pacify GCC 12.2.1 -Wcast-align.
+
        Add --pull, --gen options to build-aux/bootstrap
        This supports a single bootstrap script with --pull and --gen
        options, as an alternative to separate autogen.sh and autopull.sh
index 676523ba821261f6f353c5c59bce4e251cdf8484..7876edc4f0edcc64da343fbfc868180ee312dd87 100644 (file)
@@ -81,9 +81,10 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
       uint32_t flag = ntohl (xattr[1]);
       uint32_t wholen = ntohl (xattr[3]);
       xattr += 4;
-      int64_t wholen4 = wholen;
-      wholen4 = ((wholen4 + (BYTES_PER_NETWORK_UINT))
-                 & ~ (BYTES_PER_NETWORK_UINT - 1));
+      int whowords = (wholen / BYTES_PER_NETWORK_UINT
+                      + (wholen % BYTES_PER_NETWORK_UINT != 0));
+      int64_t wholen4 = whowords;
+      wholen4 *= BYTES_PER_NETWORK_UINT;
 
       /* Trivial ACLs have only ACE4_ACCESS_ALLOWED_ACE_TYPE or
          ACE4_ACCESS_DENIED_ACE_TYPE.  */
@@ -115,7 +116,7 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
         return 1;
       ace_found |= ace_found_bit;
 
-      xattr = (uint32_t *) ((char *) xattr + wholen4);
+      xattr += whowords;
     }
 
   return 0;