diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_gentm.c')
| -rw-r--r-- | src/lib/libcrypto/asn1/a_gentm.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/a_gentm.c b/src/lib/libcrypto/asn1/a_gentm.c index cd09f68b38..8581007868 100644 --- a/src/lib/libcrypto/asn1/a_gentm.c +++ b/src/lib/libcrypto/asn1/a_gentm.c | |||
| @@ -208,6 +208,7 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, | |||
| 208 | char *p; | 208 | char *p; |
| 209 | struct tm *ts; | 209 | struct tm *ts; |
| 210 | struct tm data; | 210 | struct tm data; |
| 211 | size_t len = 20; | ||
| 211 | 212 | ||
| 212 | if (s == NULL) | 213 | if (s == NULL) |
| 213 | s=M_ASN1_GENERALIZEDTIME_new(); | 214 | s=M_ASN1_GENERALIZEDTIME_new(); |
| @@ -219,17 +220,17 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, | |||
| 219 | return(NULL); | 220 | return(NULL); |
| 220 | 221 | ||
| 221 | p=(char *)s->data; | 222 | p=(char *)s->data; |
| 222 | if ((p == NULL) || (s->length < 16)) | 223 | if ((p == NULL) || ((size_t)s->length < len)) |
| 223 | { | 224 | { |
| 224 | p=OPENSSL_malloc(20); | 225 | p=OPENSSL_malloc(len); |
| 225 | if (p == NULL) return(NULL); | 226 | if (p == NULL) return(NULL); |
| 226 | if (s->data != NULL) | 227 | if (s->data != NULL) |
| 227 | OPENSSL_free(s->data); | 228 | OPENSSL_free(s->data); |
| 228 | s->data=(unsigned char *)p; | 229 | s->data=(unsigned char *)p; |
| 229 | } | 230 | } |
| 230 | 231 | ||
| 231 | sprintf(p,"%04d%02d%02d%02d%02d%02dZ",ts->tm_year + 1900, | 232 | BIO_snprintf(p,len,"%04d%02d%02d%02d%02d%02dZ",ts->tm_year + 1900, |
| 232 | ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec); | 233 | ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec); |
| 233 | s->length=strlen(p); | 234 | s->length=strlen(p); |
| 234 | s->type=V_ASN1_GENERALIZEDTIME; | 235 | s->type=V_ASN1_GENERALIZEDTIME; |
| 235 | #ifdef CHARSET_EBCDIC_not | 236 | #ifdef CHARSET_EBCDIC_not |
