The signtime may be used uninitialized, you can see this when pointing
rpki-client -f at the aspa test objects in regress that don't have it.
I think we should initialize on all levels: the local signtime variable
in the individual *_parse functions, in cms_parse_validate_internal(),
and in cms_get_signtime() for the case it is reused elsewhere.
Index: aspa.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/aspa.c,v
retrieving revision 1.14
diff -u -p -r1.14 aspa.c
--- aspa.c 10 Mar 2023 12:44:56 -0000 1.14
+++ aspa.c 12 Mar 2023 10:53:58 -0000
@@ -189,7 +189,7 @@ aspa_parse(X509 **x509, const char *fn,
size_t cmsz;
unsigned char *cms;
struct cert *cert = NULL;
- time_t signtime;
+ time_t signtime = 0;
int rc = 0;
memset(&p, 0, sizeof(struct parse));
Index: cms.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/cms.c,v
retrieving revision 1.31
diff -u -p -r1.31 cms.c
--- cms.c 9 Mar 2023 18:53:24 -0000 1.31
+++ cms.c 12 Mar 2023 11:02:56 -0000
@@ -69,6 +69,7 @@ cms_get_signtime(const char *fn, X509_AT
const char *time_str = "UTCtime";
int time_type = V_ASN1_UTCTIME;
+ *signtime = 0;
at = X509_ATTRIBUTE_get0_data(attr, 0, time_type, NULL);
if (at == NULL) {
time_str = "GeneralizedTime";
@@ -113,6 +114,7 @@ cms_parse_validate_internal(X509 **xp, c
*xp = NULL;
if (rsz != NULL)
*rsz = 0;
+ *signtime = 0;
/* just fail for empty buffers, the warning was printed elsewhere */
if (der == NULL)
Index: gbr.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/gbr.c,v
retrieving revision 1.25
diff -u -p -r1.25 gbr.c
--- gbr.c 10 Mar 2023 12:44:56 -0000 1.25
+++ gbr.c 12 Mar 2023 10:53:50 -0000
@@ -45,7 +45,7 @@ gbr_parse(X509 **x509, const char *fn, c
struct parse p;
size_t cmsz;
unsigned char *cms;
- time_t signtime;
+ time_t signtime = 0;
memset(&p, 0, sizeof(struct parse));
p.fn = fn;
Index: mft.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/mft.c,v
retrieving revision 1.84
diff -u -p -r1.84 mft.c
--- mft.c 9 Mar 2023 18:53:24 -0000 1.84
+++ mft.c 12 Mar 2023 10:54:38 -0000
@@ -353,7 +353,7 @@ mft_parse(X509 **x509, const char *fn, c
size_t cmsz;
unsigned char *cms;
char *crldp = NULL, *crlfile;
- time_t signtime;
+ time_t signtime = 0;
memset(&p, 0, sizeof(struct parse));
p.fn = fn;
Index: roa.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/roa.c,v
retrieving revision 1.63
diff -u -p -r1.63 roa.c
--- roa.c 10 Mar 2023 12:44:56 -0000 1.63
+++ roa.c 12 Mar 2023 10:54:05 -0000
@@ -212,7 +212,7 @@ roa_parse(X509 **x509, const char *fn, c
size_t cmsz;
unsigned char *cms;
struct cert *cert = NULL;
- time_t signtime;
+ time_t signtime = 0;
int rc = 0;
memset(&p, 0, sizeof(struct parse));
Index: rsc.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/rsc.c,v
retrieving revision 1.23
diff -u -p -r1.23 rsc.c
--- rsc.c 10 Mar 2023 12:44:56 -0000 1.23
+++ rsc.c 12 Mar 2023 10:54:23 -0000
@@ -378,7 +378,7 @@ rsc_parse(X509 **x509, const char *fn, c
unsigned char *cms;
size_t cmsz;
struct cert *cert = NULL;
- time_t signtime;
+ time_t signtime = 0;
int rc = 0;
memset(&p, 0, sizeof(struct parse));
Index: tak.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/tak.c,v
retrieving revision 1.7
diff -u -p -r1.7 tak.c
--- tak.c 10 Mar 2023 12:44:56 -0000 1.7
+++ tak.c 12 Mar 2023 10:54:13 -0000
@@ -230,7 +230,7 @@ tak_parse(X509 **x509, const char *fn, c
struct parse p;
unsigned char *cms;
size_t cmsz;
- time_t signtime;
+ time_t signtime = 0;
int rc = 0;
memset(&p, 0, sizeof(struct parse));