summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@acm.org>2018-12-15 10:40:38 -0800
committerTim Kientzle <kientzle@acm.org>2018-12-15 10:40:38 -0800
commit0b91cc42050e6708a5599c6c9474314615ebd22f (patch)
tree3ea1d6a000de6bc8f0b35c4cc6fd83fced810d03
parentcef97307a3f681fcbb2cc02db6df3619a3f8b69c (diff)
downloadlibarchive-Issue1104.tar.gz
Issue 1104: Explicitly limit the printed string to 12 charactersIssue1104
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.)
-rw-r--r--cpio/test/test_option_t.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/cpio/test/test_option_t.c b/cpio/test/test_option_t.c
index 6bcaee3c..eaa73fa3 100644
--- a/cpio/test/test_option_t.c
+++ b/cpio/test/test_option_t.c
@@ -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);