branch: fix segfault when resolving an invalid HEAD
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.
Signed-off-by Jonas Fonseca <[email protected]>
--- 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
@@ -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
Quoted 2 lines · Jonas Fonseca
Caused by return value of
resolve_refbeing 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