Skip to content

Commit

Permalink
wt-status: avoid building bogus branch name with detached HEAD
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Nov 1, 2015
1 parent bcf8cc2 commit baf0a3e
Showing 2 changed files with 10 additions and 7 deletions.
2 changes: 1 addition & 1 deletion t/t7060-wtstatus.sh
Original file line number Diff line number Diff line change
@@ -213,7 +213,7 @@ EOF
git checkout master
'

test_expect_failure 'status --branch with detached HEAD' '
test_expect_success 'status --branch with detached HEAD' '
git reset --hard &&
git checkout master^0 &&
git status --branch --porcelain >actual &&
15 changes: 9 additions & 6 deletions wt-status.c
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit baf0a3e

Please sign in to comment.