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

[PATCH 4/5] shorten_unambiguous_ref: use xsnprintf

From
Jeff King <peff@peff.net>
Date
May 19, 2018, 01:58 UTC
Message-ID
<20180519015819.GD32492@sigill.intra.peff.net>
In-Reply-To
<20180519015444.GA12080@sigill.intra.peff.net>

We convert the ref_rev_parse_rules array into scanf formats on the fly, and use snprintf() to write into each string. We should have enough memory to hold everything because of the earlier total_len computation. Let's use xsnprintf() to give runtime confirmation that this is the case, and to make it easy for people auditing the code to know there's no truncation bug.

Signed-off-by: Jeff King <peff@peff.net>
---
 refs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/refs.c b/refs.c
index 64aadd14c9..73c446628f 100644
--- a/refs.c
+++ b/refs.c
@@ -1147,8 +1147,8 @@ char *shorten_unambiguous_ref(const char *refname, int strict)
 		for (i = 0; i < nr_rules; i++) {
 			assert(offset < total_len);
 			scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
-			offset += snprintf(scanf_fmts[i], total_len - offset,
-					   ref_rev_parse_rules[i], 2, "%s") + 1;
+			offset += xsnprintf(scanf_fmts[i], total_len - offset,
+					    ref_rev_parse_rules[i], 2, "%s") + 1;
 		}
 	}
 
-- 
2.17.0.1052.g7d69f75dbf
Previous: Ben PeartNext: Jeff King
Message 12 of 13 in “snprintf truncation fixes”
  1. 0/5 snprintf truncation fixesJeff King, May 19, 2018
  2. 1/5 http: use strbufs instead of fixed buffersJeff King, May 19, 2018
  3. Stefan BellerMay 21, 2018
  4. Jeff KingMay 21, 2018
  5. Stefan BellerMay 21, 2018
  6. 2/5 log_write_email_headers: use strbufsJeff King, May 19, 2018
  7. 3/5 query_fsmonitor: use xsnprintf for formatting integersJeff King, May 19, 2018
  8. René ScharfeMay 19, 2018
  9. Jeff KingMay 20, 2018
  10. Junio C HamanoMay 21, 2018
  11. Ben PeartMay 21, 2018
  12. 4/5 shorten_unambiguous_ref: use xsnprintfJeff King, May 19, 2018
  13. 5/5 fmt_with_err: add a comment that truncation is OKJeff King, May 19, 2018

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.