From 965e4e2d3182eb179e928191abfd446c0b652867 Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Mon, 21 Jan 2013 13:19:41 -0800 Subject: [PATCH] Parse commit time as uint64_t to avoid overflow The commit time is already stored as a git_time_t, but we were parsing is as a uint32_t. This just switches the parser to use uint64_t which will handle dates further in the future (and adds some tests of those future dates). --- src/signature.c | 4 ++-- tests-clar/commit/parse.c | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/signature.c b/src/signature.c index d77655315..3380097ff 100644 --- a/src/signature.c +++ b/src/signature.c @@ -241,15 +241,15 @@ static const char *scan_for_previous_token(const char *buffer, const char *left_ static int parse_time(git_time_t *time_out, const char *buffer) { - int time; int error; + int64_t time; if (*buffer == '+' || *buffer == '-') { giterr_set(GITERR_INVALID, "Failed while parsing time. '%s' actually looks like a timezone offset.", buffer); return -1; } - error = git__strtol32(&time, buffer, &buffer, 10); + error = git__strtol64(&time, buffer, &buffer, 10); if (!error) *time_out = (git_time_t)time; diff --git a/tests-clar/commit/parse.c b/tests-clar/commit/parse.c index 908d9fba8..1ef2bfe2b 100644 --- a/tests-clar/commit/parse.c +++ b/tests-clar/commit/parse.c @@ -121,6 +121,14 @@ passing_signature_test_case passing_signature_cases[] = { {"author A U Thor and others 1234567890 -0700\n", "author ", "A U Thor", "author@example.com", 1234567890, -420}, {"author A U Thor and others 1234567890\n", "author ", "A U Thor", "author@example.com", 1234567890, 0}, {"author A U Thor> and others 1234567890\n", "author ", "A U Thor>", "author@example.com", 1234567890, 0}, + /* a variety of dates */ + {"author Vicent Marti 0 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 0, 0}, + {"author Vicent Marti 1234567890 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 1234567890, 0}, + {"author Vicent Marti 2147483647 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 0x7fffffff, 0}, + {"author Vicent Marti 4294967295 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 0xffffffff, 0}, + {"author Vicent Marti 4294967296 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 4294967296, 0}, + {"author Vicent Marti 8589934592 \n", "author ", "Vicent Marti", "tanoku@gmail.com", 8589934592, 0}, + {NULL,NULL,NULL,NULL,0,0} };