Index: openssl/crypto/asn1/a_gentm.c |
=================================================================== |
--- openssl/crypto/asn1/a_gentm.c (revision 105093) |
+++ openssl/crypto/asn1/a_gentm.c (working copy) |
@@ -117,8 +117,8 @@ |
int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d) |
{ |
- static int min[9]={ 0, 0, 1, 1, 0, 0, 0, 0, 0}; |
- static int max[9]={99, 99,12,31,23,59,59,12,59}; |
+ static const int min[9]={ 0, 0, 1, 1, 0, 0, 0, 0, 0}; |
+ static const int max[9]={99, 99,12,31,23,59,59,12,59}; |
char *a; |
int n,i,l,o; |
@@ -176,6 +176,11 @@ |
o++; |
} |
} |
+ else |
+ { |
+ /* Missing time zone information. */ |
+ goto err; |
+ } |
return(o == l); |
err: |
return(0); |
@@ -206,6 +211,12 @@ |
ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, |
time_t t) |
{ |
+ return ASN1_GENERALIZEDTIME_adj(s, t, 0, 0); |
+ } |
+ |
+ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, |
+ time_t t, int offset_day, long offset_sec) |
+ { |
char *p; |
struct tm *ts; |
struct tm data; |
@@ -220,13 +231,19 @@ |
if (ts == NULL) |
return(NULL); |
+ if (offset_day || offset_sec) |
+ { |
+ if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) |
+ return NULL; |
+ } |
+ |
p=(char *)s->data; |
if ((p == NULL) || ((size_t)s->length < len)) |
{ |
p=OPENSSL_malloc(len); |
if (p == NULL) |
{ |
- ASN1err(ASN1_F_ASN1_GENERALIZEDTIME_SET, |
+ ASN1err(ASN1_F_ASN1_GENERALIZEDTIME_ADJ, |
ERR_R_MALLOC_FAILURE); |
return(NULL); |
} |