use xstrfmt in favor of manual size calculations
In many parts of the code, we do an ugly and error-prone malloc like: const char *fmt = "something %s"; buf = xmalloc(strlen(foo) + 10 + 1); sprintf(buf, fmt, foo); This makes the code brittle, and if we ever get the allocation wrong, is a potential heap overflow. Let's instead favor xstrfmt, which handles the allocation automatically, and makes the code shorter and more readable. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
30a0ddb705
commit
fa3f60b783
@ -56,17 +56,15 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
|
||||
int i;
|
||||
const char **msgs = opts->msgs;
|
||||
const char *msg;
|
||||
char *tmp;
|
||||
const char *cmd2 = strcmp(cmd, "checkout") ? cmd : "switch branches";
|
||||
|
||||
if (advice_commit_before_merge)
|
||||
msg = "Your local changes to the following files would be overwritten by %s:\n%%s"
|
||||
"Please, commit your changes or stash them before you can %s.";
|
||||
else
|
||||
msg = "Your local changes to the following files would be overwritten by %s:\n%%s";
|
||||
tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen(cmd2) - 2);
|
||||
sprintf(tmp, msg, cmd, cmd2);
|
||||
msgs[ERROR_WOULD_OVERWRITE] = tmp;
|
||||
msgs[ERROR_NOT_UPTODATE_FILE] = tmp;
|
||||
msgs[ERROR_WOULD_OVERWRITE] = msgs[ERROR_NOT_UPTODATE_FILE] =
|
||||
xstrfmt(msg, cmd, cmd2);
|
||||
|
||||
msgs[ERROR_NOT_UPTODATE_DIR] =
|
||||
"Updating the following directories would lose untracked files in it:\n%s";
|
||||
@ -76,12 +74,9 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
|
||||
"Please move or remove them before you can %s.";
|
||||
else
|
||||
msg = "The following untracked working tree files would be %s by %s:\n%%s";
|
||||
tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("removed") + strlen(cmd2) - 4);
|
||||
sprintf(tmp, msg, "removed", cmd, cmd2);
|
||||
msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = tmp;
|
||||
tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("overwritten") + strlen(cmd2) - 4);
|
||||
sprintf(tmp, msg, "overwritten", cmd, cmd2);
|
||||
msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = tmp;
|
||||
|
||||
msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = xstrfmt(msg, "removed", cmd, cmd2);
|
||||
msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = xstrfmt(msg, "overwritten", cmd, cmd2);
|
||||
|
||||
/*
|
||||
* Special case: ERROR_BIND_OVERLAP refers to a pair of paths, we
|
||||
|
||||
Reference in New Issue
Block a user