shorten_unambiguous_ref: use xsnprintf

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> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed May 18, 2018 at 18:58 UTC bf4baf1fed7916ed10f2759a6f30a38990a83cae
1 file changed +2 -2
refs.c
+2 -2
@@ -1132,8 +1132,8 @@ char *shorten_unambiguous_ref(const char *refname, int strict)
1132 for (i = 0; i < nr_rules; i++) {
1133 assert(offset < total_len);
1134 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
1135 - offset += snprintf(scanf_fmts[i], total_len - offset,
1136 - ref_rev_parse_rules[i], 2, "%s") + 1;
1135 + offset += xsnprintf(scanf_fmts[i], total_len - offset,
1136 + ref_rev_parse_rules[i], 2, "%s") + 1;
1137 }
1138 }
1139