ptserver: testpt.c format-overflow warning 63/13663/8
authorCheyenne Wills <cwills@sinenomine.net>
Tue, 2 Jul 2019 22:58:28 +0000 (16:58 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 26 Jul 2019 14:25:21 +0000 (10:25 -0400)
GCC 9 introduced new warnings/errors and is flagging a sprintf with a
format-overflow warning.  With --checking-enabled, this error is causing
testpt.c to fail during compile.

Change the buffer size from 16 bytes to PR_MAXNAMELEN+1 and use snprintf
instead of sprintf. Generate an error message and exit if snprintf
truncates the string.

Change-Id: I30fbe0971ba3e05dc6ac61e7b2ded2fd1777374d
Reviewed-on: https://gerrit.openafs.org/13663
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/ptserver/testpt.c

index 8deb883..3888718 100644 (file)
@@ -255,7 +255,7 @@ void
 CreateGroup(int g)
 {
     afs_int32 code;
-    char name[16];
+    char name[PR_MAXNAMELEN + 1];
     afs_int32 id = 0;
     afs_int32 owner = 0;
     char *ownerName = NULL;
@@ -286,7 +286,12 @@ CreateGroup(int g)
        break;
     }
 
-    sprintf(name, "%s:%s%d", ownerName, createPrefix, g);
+    code = snprintf(name, sizeof(name), "%s:%s%d", ownerName, createPrefix, g);
+    if (code >= sizeof(name)) {
+       fprintf(stderr, "%s: generated group name is too long: %s:%s%d\n",
+               whoami, ownerName, createPrefix, g);
+       exit(13);
+    }
     code = ubik_PR_NewEntry(pruclient, 0, name, PRGRP, owner, &id);
     if (code) {
        if (code == PREXIST) {