]> Kevux Git Server - rit/commitdiff
shorten_unambiguous_ref: use xsnprintf
authorJeff King <peff@peff.net>
Sat, 19 May 2018 01:58:20 +0000 (18:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 May 2018 00:59:03 +0000 (09:59 +0900)
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>
refs.c

diff --git a/refs.c b/refs.c
index 20ba82b..bd7ac72 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1132,8 +1132,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;
                }
        }