Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2015-10-31 20:36:35 +0300
committerJunio C Hamano <gitster@pobox.com>2015-11-01 20:58:20 +0300
commitbaf0a3e47d807b63e9fc5628caa455d1da91dd6c (patch)
treeda59ce7b46e19b24fe669c6ae26183ebb4e6a741 /wt-status.c
parentbcf8cc25acb3378bf62f2cfc27c28302585841c0 (diff)
wt-status: avoid building bogus branch name with detached HEAD
If we're on a detached HEAD then wt_shortstatus_print_tracking() takes the string "HEAD (no branch)", translates it, skips the first eleven characters and passes the result to branch_get(), which returns a bogus result and accesses memory out of bounds in order to produce it. Somehow stat_tracking_info(), which is passed that result, does the right thing anyway, i.e. it finds that there is no base. Avoid the bogus results and memory accesses by checking for HEAD first and exiting early in that case. This fixes t7060 with --valgrind. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'wt-status.c')
-rw-r--r--wt-status.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/wt-status.c b/wt-status.c
index ac05b9b73d..0e4a04e695 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1521,16 +1521,19 @@ static void wt_shortstatus_print_tracking(struct wt_status *s)
return;
branch_name = s->branch;
+ if (s->is_initial)
+ color_fprintf(s->fp, header_color, _("Initial commit on "));
+
+ if (!strcmp(s->branch, "HEAD")) {
+ color_fprintf(s->fp, color(WT_STATUS_NOBRANCH, s), "%s",
+ _("HEAD (no branch)"));
+ goto conclude;
+ }
+
if (starts_with(branch_name, "refs/heads/"))
branch_name += 11;
- else if (!strcmp(branch_name, "HEAD")) {
- branch_name = _("HEAD (no branch)");
- branch_color_local = color(WT_STATUS_NOBRANCH, s);
- }
branch = branch_get(s->branch + 11);
- if (s->is_initial)
- color_fprintf(s->fp, header_color, _("Initial commit on "));
color_fprintf(s->fp, branch_color_local, "%s", branch_name);