Skip to contentSkip to conversation

branch: fix segfault when resolving an invalid HEAD

PATCH In review Jonas Fonseca 2 participants 2 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 branch: fix segfault when resolving an invalid HEAD

Caused by return value of resolve_ref being passed directly to xstrdup whereby the sanity checking was never reached.

---
 builtin-branch.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Discovered while renaming a ref from "a/b" to "a" while redoing some changes. After a git push --all, git branch in the remote repo segfaulted, since its HEAD was still pointing to "a/b".

builtin-branch.c +2 -1
index 6bd5843..a5b6bbe 100644
@@ -623,9 +623,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	    (rename && force_create))
 		usage(builtin_branch_usage);
 
-	head = xstrdup(resolve_ref("HEAD", head_sha1, 0, NULL));
+	head = resolve_ref("HEAD", head_sha1, 0, NULL);
 	if (!head)
 		die("Failed to resolve HEAD as a valid ref.");
+	head = xstrdup(head);
 	if (!strcmp(head, "HEAD")) {
 		detached = 1;
 	}
Signature · 4 lines
1.5.2.rc3.800.ga489e-dirty

-- 
Jonas Fonseca
#1 lore raw
Quoted 2 lines · Jonas Fonseca

Caused by return value of resolve_ref being passed directly to xstrdup whereby the sanity checking was never reached.

While checking other usage of resolve_ref, this problem also occurs in builtin-show-branch.c around line 695, however, the logic later in the file seems to be more forgiving so I have no idea of how to patch it.

Signature · 1 line
Jonas Fonseca