]> git.ipfire.org Git - thirdparty/git.git/commitdiff
date.c: validate and set time in a helper function
authorĐoàn Trần Công Danh <congdanhqx@gmail.com>
Fri, 24 Apr 2020 15:07:30 +0000 (22:07 +0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Apr 2020 21:06:09 +0000 (14:06 -0700)
In a later patch, we will reuse this logic, move it to a helper, now.

While we're at it, explicit states that we intentionally ignore
old-and-defective 2nd leap second.

Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
date.c

diff --git a/date.c b/date.c
index b67c5abe24a4b484e3d3afbbe7f2e00027245071..fa39e5e8a5a6a55812fef186f8da612bb7ad2c01 100644 (file)
--- a/date.c
+++ b/date.c
@@ -539,6 +539,20 @@ static int set_date(int year, int month, int day, struct tm *now_tm, time_t now,
        return -1;
 }
 
+static int set_time(long hour, long minute, long second, struct tm *tm)
+{
+       /* We accept 61st second because of leap second */
+       if (0 <= hour && hour <= 24 &&
+           0 <= minute && minute < 60 &&
+           0 <= second && second <= 60) {
+               tm->tm_hour = hour;
+               tm->tm_min = minute;
+               tm->tm_sec = second;
+               return 0;
+       }
+       return -1;
+}
+
 static int match_multi_number(timestamp_t num, char c, const char *date,
                              char *end, struct tm *tm, time_t now)
 {
@@ -556,10 +570,7 @@ static int match_multi_number(timestamp_t num, char c, const char *date,
        case ':':
                if (num3 < 0)
                        num3 = 0;
-               if (num < 25 && num2 >= 0 && num2 < 60 && num3 >= 0 && num3 <= 60) {
-                       tm->tm_hour = num;
-                       tm->tm_min = num2;
-                       tm->tm_sec = num3;
+               if (set_time(num, num2, num3, tm) == 0) {
                        break;
                }
                return 0;