revparse: only allow decimal reflog ordinal specs passing 0 to git_strol(32|64) let the implementation guess if it's dealing with an octal number or a decimal one. Let's make it safe and ensure that both 'HEAD@{010}' and 'HEAD@{10}' point at the same commit.
diff --git a/src/revparse.c b/src/revparse.c
index 3b9b2c9..af0b055 100644
--- a/src/revparse.c
+++ b/src/revparse.c
@@ -167,7 +167,7 @@ static int walk_ref_history(git_object **out, git_repository *repo, const char *
if (refspeclen > 0)
return revspec_error(reflogspec);
- if (git__strtol32(&n, reflogspec+3, NULL, 0) < 0 || n < 1)
+ if (git__strtol32(&n, reflogspec+3, NULL, 10) < 0 || n < 1)
return revspec_error(reflogspec);
if (!git_reference_lookup(&ref, repo, "HEAD")) {
@@ -233,7 +233,7 @@ static int walk_ref_history(git_object **out, git_repository *repo, const char *
/* @{N} -> Nth prior value for the ref (from reflog) */
else if (all_chars_are_digits(reflogspec+2, reflogspeclen-3) &&
- !git__strtol32(&n, reflogspec+2, NULL, 0) &&
+ !git__strtol32(&n, reflogspec+2, NULL, 10) &&
n <= 100000000) { /* Allow integer time */
normalize_maybe_empty_refname(&buf, repo, refspec, refspeclen);