It was previously possible to create a -f branch with git-checkout, which could not be used or deleted. $ git checkout -b -f master Switched to a new branch "-f" Signed-off-by: Bart Trojanowski <bart@xxxxxxxxx> --- branch.c | 11 +++++++++++ branch.h | 5 +++++ builtin-checkout.c | 4 ++++ 3 files changed, 20 insertions(+), 0 deletions(-) diff --git a/branch.c b/branch.c index 56e9492..c25e362 100644 --- a/branch.c +++ b/branch.c @@ -170,3 +170,14 @@ void remove_branch_state(void) unlink(git_path("MERGE_MSG")); unlink(git_path("SQUASH_MSG")); } + +int validate_branch_name(const char *branch_name) +{ + if (!*branch_name) + return -1; + + if (*branch_name == '-') + return -1; + + return 0; +} diff --git a/branch.h b/branch.h index 9f0c2a2..13999ba 100644 --- a/branch.h +++ b/branch.h @@ -21,4 +21,9 @@ void create_branch(const char *head, const char *name, const char *start_name, */ void remove_branch_state(void); +/* + * Check if the branch name given is well formed. Returns 0 on success. + */ +int validate_branch_name(const char *branch_name); + #endif diff --git a/builtin-checkout.c b/builtin-checkout.c index 93ea69b..f425646 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -553,6 +553,10 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) if (opts.force && opts.merge) die("git checkout: -f and -m are incompatible"); + if (opts.new_branch && validate_branch_name(opts.new_branch)) + die("git checkout: '%s' does not look like a valid branch name", + opts.new_branch); + if (argc) { const char **pathspec = get_pathspec(prefix, argv); -- 1.5.6.1.109.ga974cd.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html