|
@@ -531,7 +531,11 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
|
|
|
if (*p != 'Z')
|
|
|
goto unsupported_time;
|
|
|
|
|
|
- mon_len = month_lengths[mon];
|
|
|
+ if (year < 1970 ||
|
|
|
+ mon < 1 || mon > 12)
|
|
|
+ goto invalid_time;
|
|
|
+
|
|
|
+ mon_len = month_lengths[mon - 1];
|
|
|
if (mon == 2) {
|
|
|
if (year % 4 == 0) {
|
|
|
mon_len = 29;
|
|
@@ -543,14 +547,12 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (year < 1970 ||
|
|
|
- mon < 1 || mon > 12 ||
|
|
|
- day < 1 || day > mon_len ||
|
|
|
+ if (day < 1 || day > mon_len ||
|
|
|
hour > 23 ||
|
|
|
min > 59 ||
|
|
|
sec > 59)
|
|
|
goto invalid_time;
|
|
|
-
|
|
|
+
|
|
|
*_t = mktime64(year, mon, day, hour, min, sec);
|
|
|
return 0;
|
|
|
|