]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Issue 1104: Explicitly limit the printed string to 12 characters 1108/head
authorTim Kientzle <kientzle@acm.org>
Sat, 15 Dec 2018 18:40:38 +0000 (10:40 -0800)
committerTim Kientzle <kientzle@acm.org>
Sat, 15 Dec 2018 18:40:38 +0000 (10:40 -0800)
GCC8 tries to diagnose `snprintf()` overflows but isn't quite
smart enough for this case, so emits a false-positive warning.

Remember that `%12s` only specifies the minimum number of bytes.  GCC8
conservatively assumes this might result in writing the full length of
`date2`.  (Which will never be longer than 12 bytes, but GCC8
apparently can't reason about `strftime` format specifiers yet.)
Changing the specifier here to `%12.12s` explicitly truncates to 12
bytes and should help the compiler understand that this will never
overflow.

While I'm here, correct a minor typo in the previous line; it used
`sizeof(date)` instead of `sizeof(date2)`.  (Both are the same
size, so this had no functional impact.)

cpio/test/test_option_t.c

index 6bcaee3c87ce30b819198f729cefb730c4716dfb..eaa73fa3a01647ba2627aaab852793e8d8442e9c 100644 (file)
@@ -88,11 +88,11 @@ DEFINE_TEST(test_option_t)
        setlocale(LC_ALL, "");
 #endif
 #if defined(_WIN32) && !defined(__CYGWIN__)
-       strftime(date2, sizeof(date), "%b %d  %Y", localtime(&mtime));
-       _snprintf(date, sizeof(date)-1, "%12s file", date2);
+       strftime(date2, sizeof(date2)-1, "%b %d  %Y", localtime(&mtime));
+       _snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #else
-       strftime(date2, sizeof(date), "%b %e  %Y", localtime(&mtime));
-       snprintf(date, sizeof(date)-1, "%12s file", date2);
+       strftime(date2, sizeof(date2)-1, "%b %e  %Y", localtime(&mtime));
+       snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #endif
        assertEqualMem(p + 42, date, strlen(date));
        free(p);