git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] archive-tar: convert snprintf to xsnprintf

From
Jeff King <peff@peff.net>
Date
May 26, 2016, 04:28 UTC
Message-ID
<20160526042807.GA6756@sigill.intra.peff.net>
In-Reply-To
<CO2PR0801MB599926424BC99D7DFC2622B8E4F0@CO2PR0801MB599.namprd08.prod.outlook.com>
On Tue, May 24, 2016 at 12:44:24AM +0000, Green, Paul wrote:
Show 11 quoted lines
> While examining (relatively) recent changes to git, my eye happened to
> notice the following inconsistency on line 184 of the current version
> of archive-tar.c. 
> 
> -    sprintf(header->chksum, "%07o", ustar_header_chksum(header));
> +    snprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));
> 
> I believe the author meant to invoke the xsnprintf function, not the
> snprintf function. I say this because all of the other references to
> sprintf were indeed changed to xsnprintf, with the necessary
> additional 2nd argument.
Yep, it was indeed just a typo. Thanks for noticing.
-- >8 --
Subject: archive-tar: convert snprintf to xsnprintf

Commit f2f0267 (archive-tar: use xsnprintf for trivial formatting, 2015-09-24) converted cases of "sprintf" to "xsnprintf", but accidentally left one as just "snprintf". This meant that we could silently truncate the resulting buffer instead of flagging an error.

In practice, this is impossible to achieve, as we are formatting a ustar checksum, which can be at most 7 characters. But the point of xsnprintf is to document and check for "should be impossible" conditions; this site was just accidentally mis-converted during f2f0267.

Noticed-by: Paul Green <Paul.Green@stratus.com>
Signed-off-by: Jeff King <peff@peff.net>
---
 archive-tar.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/archive-tar.c b/archive-tar.c
index 501ca97..cb99df2 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -181,7 +181,7 @@ static void prepare_header(struct archiver_args *args,
 	memcpy(header->magic, "ustar", 6);
 	memcpy(header->version, "00", 2);
 
-	snprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));
+	xsnprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));
 }
 
 static int write_extended_header(struct archiver_args *args,
-- 
2.9.0.rc0.307.gc679867
Previous: Green, Paul
Message 2 of 2 in “Typo spotted in archive-tar.c”
  1. Green, PaulMay 24, 2016
  2. archive-tar: convert snprintf to xsnprintfJeff King, May 26, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.