diff options
Diffstat (limited to 'src/lib/libcrypto/asn1')
-rw-r--r-- | src/lib/libcrypto/asn1/a_mbstr.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/a_strex.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/a_time.c | 9 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_lib.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_par.c | 6 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/asn_moid.c | 9 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/t_pkey.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_long.c | 10 |
8 files changed, 31 insertions, 17 deletions
diff --git a/src/lib/libcrypto/asn1/a_mbstr.c b/src/lib/libcrypto/asn1/a_mbstr.c index e8a26af521..208b3ec395 100644 --- a/src/lib/libcrypto/asn1/a_mbstr.c +++ b/src/lib/libcrypto/asn1/a_mbstr.c | |||
@@ -145,14 +145,14 @@ int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, | |||
145 | 145 | ||
146 | if((minsize > 0) && (nchar < minsize)) { | 146 | if((minsize > 0) && (nchar < minsize)) { |
147 | ASN1err(ASN1_F_ASN1_MBSTRING_COPY, ASN1_R_STRING_TOO_SHORT); | 147 | ASN1err(ASN1_F_ASN1_MBSTRING_COPY, ASN1_R_STRING_TOO_SHORT); |
148 | sprintf(strbuf, "%ld", minsize); | 148 | BIO_snprintf(strbuf, sizeof strbuf, "%ld", minsize); |
149 | ERR_add_error_data(2, "minsize=", strbuf); | 149 | ERR_add_error_data(2, "minsize=", strbuf); |
150 | return -1; | 150 | return -1; |
151 | } | 151 | } |
152 | 152 | ||
153 | if((maxsize > 0) && (nchar > maxsize)) { | 153 | if((maxsize > 0) && (nchar > maxsize)) { |
154 | ASN1err(ASN1_F_ASN1_MBSTRING_COPY, ASN1_R_STRING_TOO_LONG); | 154 | ASN1err(ASN1_F_ASN1_MBSTRING_COPY, ASN1_R_STRING_TOO_LONG); |
155 | sprintf(strbuf, "%ld", maxsize); | 155 | BIO_snprintf(strbuf, sizeof strbuf, "%ld", maxsize); |
156 | ERR_add_error_data(2, "maxsize=", strbuf); | 156 | ERR_add_error_data(2, "maxsize=", strbuf); |
157 | return -1; | 157 | return -1; |
158 | } | 158 | } |
diff --git a/src/lib/libcrypto/asn1/a_strex.c b/src/lib/libcrypto/asn1/a_strex.c index 8abfdfe598..bde666a6ff 100644 --- a/src/lib/libcrypto/asn1/a_strex.c +++ b/src/lib/libcrypto/asn1/a_strex.c | |||
@@ -285,7 +285,7 @@ const static signed char tag2nbyte[] = { | |||
285 | -1, -1, 0, -1, /* 10-13 */ | 285 | -1, -1, 0, -1, /* 10-13 */ |
286 | -1, -1, -1, -1, /* 15-17 */ | 286 | -1, -1, -1, -1, /* 15-17 */ |
287 | -1, 1, 1, /* 18-20 */ | 287 | -1, 1, 1, /* 18-20 */ |
288 | -1, 1, -1,-1, /* 21-24 */ | 288 | -1, 1, 1, 1, /* 21-24 */ |
289 | -1, 1, -1, /* 25-27 */ | 289 | -1, 1, -1, /* 25-27 */ |
290 | 4, -1, 2 /* 28-30 */ | 290 | 4, -1, 2 /* 28-30 */ |
291 | }; | 291 | }; |
diff --git a/src/lib/libcrypto/asn1/a_time.c b/src/lib/libcrypto/asn1/a_time.c index 7348da9457..159681fbcb 100644 --- a/src/lib/libcrypto/asn1/a_time.c +++ b/src/lib/libcrypto/asn1/a_time.c | |||
@@ -128,6 +128,7 @@ ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZE | |||
128 | { | 128 | { |
129 | ASN1_GENERALIZEDTIME *ret; | 129 | ASN1_GENERALIZEDTIME *ret; |
130 | char *str; | 130 | char *str; |
131 | int newlen; | ||
131 | 132 | ||
132 | if (!ASN1_TIME_check(t)) return NULL; | 133 | if (!ASN1_TIME_check(t)) return NULL; |
133 | 134 | ||
@@ -150,12 +151,14 @@ ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZE | |||
150 | /* grow the string */ | 151 | /* grow the string */ |
151 | if (!ASN1_STRING_set(ret, NULL, t->length + 2)) | 152 | if (!ASN1_STRING_set(ret, NULL, t->length + 2)) |
152 | return NULL; | 153 | return NULL; |
154 | /* ASN1_STRING_set() allocated 'len + 1' bytes. */ | ||
155 | newlen = t->length + 2 + 1; | ||
153 | str = (char *)ret->data; | 156 | str = (char *)ret->data; |
154 | /* Work out the century and prepend */ | 157 | /* Work out the century and prepend */ |
155 | if (t->data[0] >= '5') strcpy(str, "19"); | 158 | if (t->data[0] >= '5') BUF_strlcpy(str, "19", newlen); |
156 | else strcpy(str, "20"); | 159 | else BUF_strlcpy(str, "20", newlen); |
157 | 160 | ||
158 | BUF_strlcat(str, (char *)t->data, t->length+3); /* Include space for a '\0' */ | 161 | BUF_strlcat(str, (char *)t->data, newlen); |
159 | 162 | ||
160 | return ret; | 163 | return ret; |
161 | } | 164 | } |
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c index e30d5dd303..a74f1368d3 100644 --- a/src/lib/libcrypto/asn1/asn1_lib.c +++ b/src/lib/libcrypto/asn1/asn1_lib.c | |||
@@ -414,8 +414,8 @@ void asn1_add_error(unsigned char *address, int offset) | |||
414 | { | 414 | { |
415 | char buf1[DECIMAL_SIZE(address)+1],buf2[DECIMAL_SIZE(offset)+1]; | 415 | char buf1[DECIMAL_SIZE(address)+1],buf2[DECIMAL_SIZE(offset)+1]; |
416 | 416 | ||
417 | sprintf(buf1,"%lu",(unsigned long)address); | 417 | BIO_snprintf(buf1,sizeof buf1,"%lu",(unsigned long)address); |
418 | sprintf(buf2,"%d",offset); | 418 | BIO_snprintf(buf2,sizeof buf2,"%d",offset); |
419 | ERR_add_error_data(4,"address=",buf1," offset=",buf2); | 419 | ERR_add_error_data(4,"address=",buf1," offset=",buf2); |
420 | } | 420 | } |
421 | 421 | ||
diff --git a/src/lib/libcrypto/asn1/asn1_par.c b/src/lib/libcrypto/asn1/asn1_par.c index e48532a24d..676d434f03 100644 --- a/src/lib/libcrypto/asn1/asn1_par.c +++ b/src/lib/libcrypto/asn1/asn1_par.c | |||
@@ -83,11 +83,11 @@ static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed, | |||
83 | 83 | ||
84 | p=str; | 84 | p=str; |
85 | if ((xclass & V_ASN1_PRIVATE) == V_ASN1_PRIVATE) | 85 | if ((xclass & V_ASN1_PRIVATE) == V_ASN1_PRIVATE) |
86 | sprintf(str,"priv [ %d ] ",tag); | 86 | BIO_snprintf(str,sizeof str,"priv [ %d ] ",tag); |
87 | else if ((xclass & V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC) | 87 | else if ((xclass & V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC) |
88 | sprintf(str,"cont [ %d ]",tag); | 88 | BIO_snprintf(str,sizeof str,"cont [ %d ]",tag); |
89 | else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION) | 89 | else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION) |
90 | sprintf(str,"appl [ %d ]",tag); | 90 | BIO_snprintf(str,sizeof str,"appl [ %d ]",tag); |
91 | else p = ASN1_tag2str(tag); | 91 | else p = ASN1_tag2str(tag); |
92 | 92 | ||
93 | if (p2 != NULL) | 93 | if (p2 != NULL) |
diff --git a/src/lib/libcrypto/asn1/asn_moid.c b/src/lib/libcrypto/asn1/asn_moid.c index be20db4bad..edb44c988f 100644 --- a/src/lib/libcrypto/asn1/asn_moid.c +++ b/src/lib/libcrypto/asn1/asn_moid.c | |||
@@ -87,9 +87,14 @@ static int oid_module_init(CONF_IMODULE *md, const CONF *cnf) | |||
87 | } | 87 | } |
88 | } | 88 | } |
89 | return 1; | 89 | return 1; |
90 | } | 90 | } |
91 | |||
92 | static void oid_module_finish(CONF_IMODULE *md) | ||
93 | { | ||
94 | OBJ_cleanup(); | ||
95 | } | ||
91 | 96 | ||
92 | void ASN1_add_oid_module(void) | 97 | void ASN1_add_oid_module(void) |
93 | { | 98 | { |
94 | CONF_module_add("oid_section", oid_module_init, 0); | 99 | CONF_module_add("oid_section", oid_module_init, oid_module_finish); |
95 | } | 100 | } |
diff --git a/src/lib/libcrypto/asn1/t_pkey.c b/src/lib/libcrypto/asn1/t_pkey.c index 4e09c9e44e..d15006e654 100644 --- a/src/lib/libcrypto/asn1/t_pkey.c +++ b/src/lib/libcrypto/asn1/t_pkey.c | |||
@@ -139,9 +139,9 @@ int RSA_print(BIO *bp, const RSA *x, int off) | |||
139 | } | 139 | } |
140 | 140 | ||
141 | if (x->d == NULL) | 141 | if (x->d == NULL) |
142 | sprintf(str,"Modulus (%d bit):",BN_num_bits(x->n)); | 142 | BIO_snprintf(str,sizeof str,"Modulus (%d bit):",BN_num_bits(x->n)); |
143 | else | 143 | else |
144 | strcpy(str,"modulus:"); | 144 | BUF_strlcpy(str,"modulus:",sizeof str); |
145 | if (!print(bp,str,x->n,m,off)) goto err; | 145 | if (!print(bp,str,x->n,m,off)) goto err; |
146 | s=(x->d == NULL)?"Exponent:":"publicExponent:"; | 146 | s=(x->d == NULL)?"Exponent:":"publicExponent:"; |
147 | if (!print(bp,s,x->e,m,off)) goto err; | 147 | if (!print(bp,s,x->e,m,off)) goto err; |
diff --git a/src/lib/libcrypto/asn1/x_long.c b/src/lib/libcrypto/asn1/x_long.c index c04b192794..c5f25956cb 100644 --- a/src/lib/libcrypto/asn1/x_long.c +++ b/src/lib/libcrypto/asn1/x_long.c | |||
@@ -104,7 +104,12 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const A | |||
104 | long ltmp; | 104 | long ltmp; |
105 | unsigned long utmp; | 105 | unsigned long utmp; |
106 | int clen, pad, i; | 106 | int clen, pad, i; |
107 | ltmp = *(long *)pval; | 107 | /* this exists to bypass broken gcc optimization */ |
108 | char *cp = (char *)pval; | ||
109 | |||
110 | /* use memcpy, because we may not be long aligned */ | ||
111 | memcpy(<mp, cp, sizeof(long)); | ||
112 | |||
108 | if(ltmp == it->size) return -1; | 113 | if(ltmp == it->size) return -1; |
109 | /* Convert the long to positive: we subtract one if negative so | 114 | /* Convert the long to positive: we subtract one if negative so |
110 | * we can cleanly handle the padding if only the MSB of the leading | 115 | * we can cleanly handle the padding if only the MSB of the leading |
@@ -136,6 +141,7 @@ static int long_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, | |||
136 | int neg, i; | 141 | int neg, i; |
137 | long ltmp; | 142 | long ltmp; |
138 | unsigned long utmp = 0; | 143 | unsigned long utmp = 0; |
144 | char *cp = (char *)pval; | ||
139 | if(len > sizeof(long)) { | 145 | if(len > sizeof(long)) { |
140 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 146 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); |
141 | return 0; | 147 | return 0; |
@@ -158,6 +164,6 @@ static int long_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, | |||
158 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 164 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); |
159 | return 0; | 165 | return 0; |
160 | } | 166 | } |
161 | *(long *)pval = ltmp; | 167 | memcpy(cp, <mp, sizeof(long)); |
162 | return 1; | 168 | return 1; |
163 | } | 169 | } |