Allowing a branch with a name 'HEAD' could trigger ambiguity. We could
avoid this by checking for it manually. Moreover this has been done
partially in 8efb8899c ("branch: segfault fixes and validation", 2013-02-23)
There was still a way to create a branch with name 'HEAD' by using
$ git checkout -b HEAD
Avoid such loop holes by 'strictly' checking for a branch with name HEAD.
The check is referred to as strict because it's done in a place which is
supposed to be called to ensure that a new branch name is a valid one.
Signed-off-by: Kaartic Sivaraam <[email protected]>
---
branch.c | 3 +++
builtin/branch.c | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/branch.c b/branch.c
index 36541d05c..ea1050649 100644
--- a/branch.c
+++ b/branch.c
@@ -184,6 +184,9 @@ int validate_new_branchname(const char *name, struct strbuf
*ref,
if (strbuf_check_branch_ref(ref, name))
die(_("'%s' is not a valid branch name."), name);
+ if (!strcmp(name, "HEAD"))
+ die(_("it does not make sense to create 'HEAD' manually"));
+
if (!ref_exists(ref->buf))
return 0;
else if (!force && !attr_only)
diff --git a/builtin/branch.c b/builtin/branch.c
index 16d391b40..c86348d4c 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -762,9 +762,6 @@ int cmd_branch(int argc, const char **argv, const char
*prefix)
int branch_existed = 0, remote_tracking = 0;
struct strbuf buf = STRBUF_INIT;
- if (!strcmp(argv[0], "HEAD"))
- die(_("it does not make sense to create 'HEAD'
manually"));
-
if (!branch)
die(_("no such branch '%s'"), argv[0]);
--
2.14.1.1006.g90ad9a07c