diff options
author | Werner Koch <[email protected]> | 2023-10-14 15:23:42 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2023-10-14 15:23:42 +0000 |
commit | 606933dfb48ddd3113bc60eb8b18126112b3b8a4 (patch) | |
tree | 28b4da8f60f69c10de0dc457682b2fe59924a096 | |
parent | common: New function scan_secondsstr. (diff) | |
download | gnupg-606933dfb48ddd3113bc60eb8b18126112b3b8a4.tar.gz gnupg-606933dfb48ddd3113bc60eb8b18126112b3b8a4.zip |
gpg: Allow to specify seconds since Epoch beyond 2038.
* g10/keygen.c (parse_expire_string_with_ct): Use new function
scan_secondsstr.
(parse_creation_string): Ditto.
--
Noet that we cap the seconds at the year 2106.
GnuPG-bug-id: 6736
-rw-r--r-- | g10/keygen.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/g10/keygen.c b/g10/keygen.c index c252b0de4..06fc39aa1 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2759,14 +2759,21 @@ parse_expire_string_with_ct (const char *string, u32 creation_time) || !strcmp (string, "never") || !strcmp (string, "-")) seconds = 0; else if (!strncmp (string, "seconds=", 8)) - seconds = atoi (string+8); + seconds = scan_secondsstr (string+8); else if ((abs_date = scan_isodatestr(string)) && (abs_date+86400/2) > curtime) seconds = (abs_date+86400/2) - curtime; else if ((tt = isotime2epoch (string)) != (time_t)(-1)) seconds = (u32)tt - curtime; else if ((mult = check_valid_days (string))) - seconds = atoi (string) * 86400L * mult; + { + uint64_t tmp64; + tmp64 = scan_secondsstr (string) * 86400L * mult; + if (tmp64 >= (u32)(-1)) + seconds = (u32)(-1) - 1; /* cap value. */ + else + seconds = (u32)tmp64; + } else seconds = (u32)(-1); @@ -2790,7 +2797,7 @@ parse_creation_string (const char *string) if (!*string) seconds = 0; else if ( !strncmp (string, "seconds=", 8) ) - seconds = atoi (string+8); + seconds = scan_secondsstr (string+8); else if ( !(seconds = scan_isodatestr (string))) { time_t tmp = isotime2epoch (string); |