threads / patch / 14309

patchbranch -v: Prevent garbage output on remote refs

Subject: [PATCH] branch -v: Prevent garbage output on remote refs

## tl;dr

3 messages between Jul 6, 2008 and Jul 6, 2008. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Brian Gernhardt· Jul 6, 2008, 09:24 UTC · lore

The stat string was only initialized if the ref was local, but was always used in a printf. This meant that whatever data was on the stack got printed. In the case of "branch -av", this was probably the tracking information of the last local branch. If the case of "branch -rv", this was "@???" in my case.

Signed-off-by: Brian Gernhardt <benji@silverinsanity.com>
---
 After looking through the second get of changes I pulled, I tried this:
 $ git branch -av
 * master                 3195299 [ahead 1] Make rebase save ORIG_HEAD if changing current branch
   origin/HEAD            08b51f5 [ahead 1] Merge branch 'qq/maint'
   origin/gitk-for-paulus 7d8856d [ahead 1] gitk: Update German translation.
 Huh. That doesn't look right...  Let's try just showing the remotes:
 $ git branch -rv
   origin/HEAD            08b51f5 @???Merge branch 'qq/maint'
   origin/gitk-for-paulus 7d8856d @???gitk: Update German translation.
 That's definately not good.
 I guess that other people either have a compiler that is more careful about
 clearing stack variables, or don't use "branch -v".
 builtin-branch.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to builtin-branch.c +1 −1
diff --git a/builtin-branch.c b/builtin-branch.c
index e9423d1..470c59f 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -327,7 +327,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
 	if (verbose) {
 		struct strbuf subject;
 		const char *sub = " **** invalid ref ****";
-		char stat[128];
+		char stat[128] = "";
 
 		strbuf_init(&subject, 0);
 
-- 
1.5.6.2.336.g3195
Junio C Hamano· Jul 6, 2008, 10:07 UTC · re: Brian Gernhardt · lore

Re: [PATCH] branch -v: Prevent garbage output on remote refs

Thanks, but I have pushed out a slightly different change.

-- >8 -- branch -r -v: do not spit out garbage

The codepath to emit relationship between the branch and what it tracks forgot to initialize a string buffer stat[] to empty when showing a tracking branch. This moves the emptying so that the buffer starts as empty and stays so when no information is added to fix this issue.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin-branch.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)
Show changes to builtin-branch.c +2 −3
diff --git a/builtin-branch.c b/builtin-branch.c
index e9423d1..ff71f3d 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -287,10 +287,8 @@ static void fill_tracking_info(char *stat, const char *branch_name)
 	int ours, theirs;
 	struct branch *branch = branch_get(branch_name);
 
-	if (!stat_tracking_info(branch, &ours, &theirs) || (!ours && !theirs)) {
-		stat[0] = '\0';
+	if (!stat_tracking_info(branch, &ours, &theirs) || (!ours && !theirs))
 		return;
-	}
 	if (!ours)
 		sprintf(stat, "[behind %d] ", theirs);
 	else if (!theirs)
@@ -330,6 +328,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
 		char stat[128];
 
 		strbuf_init(&subject, 0);
+		stat[0] = '\0';
 
 		commit = lookup_commit(item->sha1);
 		if (commit && !parse_commit(commit)) {
Brian Gernhardt· Jul 6, 2008, 16:13 UTC · re: Junio C Hamano · lore

Re: [PATCH] branch -v: Prevent garbage output on remote refs

On Jul 6, 2008, at 6:07 AM, Junio C Hamano wrote:
> Thanks, but I have pushed out a slightly different change.
>
> -- >8 --
> branch -r -v: do not spit out garbage

Looks good, and more importantly works. Cherry-picked it from pu onto next. Hopefully it'll move there on it's own soon.

~~ Brian

← back to recent threads