Our color buffers are all COLOR_MAXLEN, which fits the largest possible color. So we can never overflow the buffer by copying an existing color. However, using strcpy() makes it harder to audit the code-base for calls that _are_ problems. We should use something like xsnprintf(), which shows the reader that we expect this never to fail (and provides a run-time assertion if it does, just in case).
Signed-off-by: Jeff King <peff@peff.net> --- Another option would just be color_parse(repeated_meta_color, "cyan"). The run-time cost is slightly higher, but it probably doesn't matter here, and perhaps it's more readable.
This is a repost from:
https://public-inbox.org/git/20180610204419.GA11273@sigill.intra.peff.net/
which I think just got overlooked as we were in the midst of the 2.18 release cycle.
builtin/blame.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Show changes to builtin/blame.c +3 −1
diff --git a/builtin/blame.c b/builtin/blame.c index 5a0388aaef..63bdf755bb 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1069,7 +1069,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix) find_alignment(&sb, &output_option); if (!*repeated_meta_color && (output_option & OUTPUT_COLOR_LINE)) - strcpy(repeated_meta_color, GIT_COLOR_CYAN); + xsnprintf(repeated_meta_color, + sizeof(repeated_meta_color), + "%s", GIT_COLOR_CYAN); } if (output_option & OUTPUT_ANNOTATE_COMPAT) output_option &= ~(OUTPUT_COLOR_LINE | OUTPUT_SHOW_AGE_WITH_COLOR);
-- 2.18.0.433.gb9621797ee