From 3abf7a093b78bf2678bbdf9274ad5d2bf4595649 Mon Sep 17 00:00:00 2001 From: gkoehler Date: Sun, 28 Sep 2025 16:22:51 +0000 Subject: [PATCH] Fix warning: 'snprintf' will always be truncated When make -t touched an archive member, snprintf(_, 12, "%-12ld", _) truncated 13 bytes to 12. Fix is to snprintf() 13 bytes in a temp buffer, then memcpy() 12 without the '\0'. Also change "%-12ld" to "%-12lld", (long long)time_t. from espie@ ok tb@ --- usr.bin/make/arch.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/usr.bin/make/arch.c b/usr.bin/make/arch.c index 278574a2d39..9fb18dbe2b6 100644 --- a/usr.bin/make/arch.c +++ b/usr.bin/make/arch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: arch.c,v 1.94 2023/09/04 11:35:11 espie Exp $ */ +/* $OpenBSD: arch.c,v 1.95 2025/09/28 16:22:51 gkoehler Exp $ */ /* $NetBSD: arch.c,v 1.17 1996/11/06 17:58:59 christos Exp $ */ /* @@ -836,8 +836,10 @@ ArchTouch(const char *archive, const char *member) arch = ArchFindMember(archive, member, &arHeader, "r+"); if (arch != NULL) { - snprintf(arHeader.ar_date, sizeof(arHeader.ar_date), - "%-12ld", (long) time(NULL)); + char temp[sizeof(arHeader.ar_date)+1]; + + snprintf(temp, sizeof(temp), "%-12lld", (long long)time(NULL)); + memcpy(arHeader.ar_date, temp, sizeof(arHeader.ar_date)); if (fseek(arch, -sizeof(struct ar_hdr), SEEK_CUR) == 0) (void)fwrite(&arHeader, sizeof(struct ar_hdr), 1, arch); fclose(arch);