revision: parse "git log -<count>" more carefully
authorJunio C Hamano <gitster@pobox.com>
Fri, 6 Jun 2014 22:33:25 +0000 (15:33 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Jun 2014 21:53:49 +0000 (14:53 -0700)
This mistyped command line simply ignores "master" and ends up
showing two commits from the current HEAD:

    $ git log -2master

because we feed "2master" to atoi() without making sure that the
whole string is parsed as an integer.

Use the strtol_i() helper function instead.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
revision.c

index 7afedc5..d5e2f1a 100644 (file)
@@ -1612,8 +1612,10 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                revs->skip_count = atoi(optarg);
                return argcount;
        } else if ((*arg == '-') && isdigit(arg[1])) {
-       /* accept -<digit>, like traditional "head" */
-               revs->max_count = atoi(arg + 1);
+               /* accept -<digit>, like traditional "head" */
+               if (strtol_i(arg + 1, 10, &revs->max_count) < 0 ||
+                   revs->max_count < 0)
+                       die("'%s': not a non-negative integer", arg + 1);
                revs->no_walk = 0;
        } else if (!strcmp(arg, "-n")) {
                if (argc <= 1)