Commits

Junio C Hamano  committed b15af07

show-branch --reflog: tighten input validation.

Signed-off-by: Junio C Hamano <junkio@cox.net>

  • Participants
  • Parent commits 76a44c5

Comments (0)

Files changed (1)

File builtin-show-branch.c

 #include "builtin.h"
 
 static const char show_branch_usage[] =
-"git-show-branch [--sparse] [--current] [--all] [--remotes] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...] | --reflog[=n] <branch>";
+"git-show-branch [--sparse] [--current] [--all] [--remotes] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...] | --reflog[=n[,b]] <branch>";
+static const char show_branch_usage_reflog[] =
+"--reflog is incompatible with --all, --remotes, --independent or --merge-base";
 
 static int default_num;
 static int default_alloc;
 		 */
 		if (independent || merge_base)
 			usage(show_branch_usage);
-		if (!!reflog && (0 < extra))
+		if (!!reflog && ((0 < extra) || all_heads || all_remotes))
 			/*
 			 * Asking for --more in reflog mode does not
-			 * make sense.
+			 * make sense.  --list is Ok.
+			 *
+			 * Also --all and --remotes do not make sense either.
 			 */
-			usage(show_branch_usage);
+			usage(show_branch_usage_reflog);
 	}
 
 	/* If nothing is specified, show all branches by default */
 		int base = 0;
 		if (ac != 1)
 			die("--reflog option needs one branch name");
+		if (MAX_REVS < reflog)
+			die("Only %d entries can be shown at one time.",
+			    MAX_REVS);
 		if (!dwim_ref(*av, strlen(*av), sha1, &ref))
 			die("No such ref %s", *av);