fsx: fix strncpy usage error
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 11 Nov 2020 00:44:43 +0000 (16:44 -0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 15 Nov 2020 06:46:13 +0000 (14:46 +0800)
We shouldn't feed sizeof() to strncpy as the string length.  Just use
snprintf, which at least doesn't have the zero termination problems.

In file included from /usr/include/string.h:495,
                 from ../src/global.h:73,
                 from fsx.c:16:
In function 'strncpy',
    inlined from 'main' at fsx.c:2944:5:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: warning:
'__builtin_strncpy' specified bound 4096 equals destination size
[-Wstringop-truncation]
  106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'strncpy',
    inlined from 'main' at fsx.c:2914:4:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: warning:
'__builtin_strncpy' specified bound 1024 equals destination size
[-Wstringop-truncation]
  106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
ltp/fsx.c

index 0abd7de16806ee3530253ed6c7b6f97252d19c7b..cd0bae55aeb887330c27f1c9ca19ffa811b8e87d 100644 (file)
--- a/ltp/fsx.c
+++ b/ltp/fsx.c
@@ -2769,8 +2769,7 @@ main(int argc, char **argv)
                        randomoplen = 0;
                        break;
                case 'P':
                        randomoplen = 0;
                        break;
                case 'P':
-                       strncpy(dname, optarg, sizeof(dname));
-                       strcat(dname, "/");
+                       snprintf(dname, sizeof(dname), "%s/", optarg);
                        dirpath = strlen(dname);
                        break;
                 case 'R':
                        dirpath = strlen(dname);
                        break;
                 case 'R':
@@ -2799,7 +2798,7 @@ main(int argc, char **argv)
                        break;
                case 255:  /* --record-ops */
                        if (optarg)
                        break;
                case 255:  /* --record-ops */
                        if (optarg)
-                               strncpy(opsfile, optarg, sizeof(opsfile));
+                               snprintf(opsfile, sizeof(opsfile), "%s", optarg);
                        recordops = opsfile;
                        break;
                case 256:  /* --replay-ops */
                        recordops = opsfile;
                        break;
                case 256:  /* --replay-ops */