int days;
if (batch) {
- if (cfg.expiration_days <= 0)
+ if (cfg.expiration_days == 0 || cfg.expiration_days < -2)
return 365;
else
return cfg.expiration_days;
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <intprops.h>
/* Gnulib portability files. */
#include <read-file.h>
if (!batch)
fprintf(stderr, "\n\nActivation/Expiration time.\n");
- gnutls_x509_crt_set_activation_time(crt, time(NULL));
-
now = time(NULL);
- do {
- days = get_days();
- secs = days * 24 * 60 * 60 + now;
- }
- while (secs < now
- || (unsigned) (secs - now) / (24 * 60 * 60) !=
- (unsigned) days);
+ gnutls_x509_crt_set_activation_time(crt, now);
+
+ days = get_days();
+ secs = days;
+
+ if (secs != (time_t)-1) {
+ if (INT_MULTIPLY_OVERFLOW(secs, 24*60*60)) {
+ secs = -1;
+ } else {
+ secs *= 24*60*60;
+ }
+ }
+
+ if (secs != (time_t)-1) {
+ if (INT_ADD_OVERFLOW(secs, now)) {
+ secs = -1;
+ } else {
+ secs += now;
+ }
+ }
result = gnutls_x509_crt_set_expiration_time(crt, secs);
if (result < 0) {