diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_d2i_fp.c')
-rw-r--r-- | src/lib/libcrypto/asn1/a_d2i_fp.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/src/lib/libcrypto/asn1/a_d2i_fp.c b/src/lib/libcrypto/asn1/a_d2i_fp.c index c00b304c61..390a1072d5 100644 --- a/src/lib/libcrypto/asn1/a_d2i_fp.c +++ b/src/lib/libcrypto/asn1/a_d2i_fp.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_d2i_fp.c,v 1.15 2016/05/20 15:46:21 bcook Exp $ */ | 1 | /* $OpenBSD: a_d2i_fp.c,v 1.16 2017/01/29 17:49:22 beck Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -74,7 +74,7 @@ ASN1_d2i_fp(void *(*xnew)(void), d2i_of_void *d2i, FILE *in, void **x) | |||
74 | void *ret; | 74 | void *ret; |
75 | 75 | ||
76 | if ((b = BIO_new(BIO_s_file())) == NULL) { | 76 | if ((b = BIO_new(BIO_s_file())) == NULL) { |
77 | ASN1err(ASN1_F_ASN1_D2I_FP, ERR_R_BUF_LIB); | 77 | ASN1error(ERR_R_BUF_LIB); |
78 | return (NULL); | 78 | return (NULL); |
79 | } | 79 | } |
80 | BIO_set_fp(b, in, BIO_NOCLOSE); | 80 | BIO_set_fp(b, in, BIO_NOCLOSE); |
@@ -134,7 +134,7 @@ ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x) | |||
134 | char *ret; | 134 | char *ret; |
135 | 135 | ||
136 | if ((b = BIO_new(BIO_s_file())) == NULL) { | 136 | if ((b = BIO_new(BIO_s_file())) == NULL) { |
137 | ASN1err(ASN1_F_ASN1_ITEM_D2I_FP, ERR_R_BUF_LIB); | 137 | ASN1error(ERR_R_BUF_LIB); |
138 | return (NULL); | 138 | return (NULL); |
139 | } | 139 | } |
140 | BIO_set_fp(b, in, BIO_NOCLOSE); | 140 | BIO_set_fp(b, in, BIO_NOCLOSE); |
@@ -159,7 +159,7 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
159 | 159 | ||
160 | b = BUF_MEM_new(); | 160 | b = BUF_MEM_new(); |
161 | if (b == NULL) { | 161 | if (b == NULL) { |
162 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, ERR_R_MALLOC_FAILURE); | 162 | ASN1error(ERR_R_MALLOC_FAILURE); |
163 | return -1; | 163 | return -1; |
164 | } | 164 | } |
165 | 165 | ||
@@ -170,20 +170,17 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
170 | 170 | ||
171 | if (len + want < len || | 171 | if (len + want < len || |
172 | !BUF_MEM_grow_clean(b, len + want)) { | 172 | !BUF_MEM_grow_clean(b, len + want)) { |
173 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 173 | ASN1error(ERR_R_MALLOC_FAILURE); |
174 | ERR_R_MALLOC_FAILURE); | ||
175 | goto err; | 174 | goto err; |
176 | } | 175 | } |
177 | i = BIO_read(in, &(b->data[len]), want); | 176 | i = BIO_read(in, &(b->data[len]), want); |
178 | if ((i < 0) && ((len - off) == 0)) { | 177 | if ((i < 0) && ((len - off) == 0)) { |
179 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 178 | ASN1error(ASN1_R_NOT_ENOUGH_DATA); |
180 | ASN1_R_NOT_ENOUGH_DATA); | ||
181 | goto err; | 179 | goto err; |
182 | } | 180 | } |
183 | if (i > 0) { | 181 | if (i > 0) { |
184 | if (len + i < len) { | 182 | if (len + i < len) { |
185 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 183 | ASN1error(ASN1_R_TOO_LONG); |
186 | ASN1_R_TOO_LONG); | ||
187 | goto err; | 184 | goto err; |
188 | } | 185 | } |
189 | len += i; | 186 | len += i; |
@@ -211,8 +208,7 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
211 | /* no data body so go round again */ | 208 | /* no data body so go round again */ |
212 | eos++; | 209 | eos++; |
213 | if (eos < 0) { | 210 | if (eos < 0) { |
214 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 211 | ASN1error(ASN1_R_HEADER_TOO_LONG); |
215 | ASN1_R_HEADER_TOO_LONG); | ||
216 | goto err; | 212 | goto err; |
217 | } | 213 | } |
218 | want = HEADER_SIZE; | 214 | want = HEADER_SIZE; |
@@ -232,8 +228,7 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
232 | want -= (len - off); | 228 | want -= (len - off); |
233 | if (want > INT_MAX /* BIO_read takes an int length */ || | 229 | if (want > INT_MAX /* BIO_read takes an int length */ || |
234 | len+want < len) { | 230 | len+want < len) { |
235 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 231 | ASN1error(ASN1_R_TOO_LONG); |
236 | ASN1_R_TOO_LONG); | ||
237 | goto err; | 232 | goto err; |
238 | } | 233 | } |
239 | while (want > 0) { | 234 | while (want > 0) { |
@@ -246,16 +241,14 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
246 | size_t chunk = want > chunk_max ? chunk_max : want; | 241 | size_t chunk = want > chunk_max ? chunk_max : want; |
247 | 242 | ||
248 | if (!BUF_MEM_grow_clean(b, len + chunk)) { | 243 | if (!BUF_MEM_grow_clean(b, len + chunk)) { |
249 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 244 | ASN1error(ERR_R_MALLOC_FAILURE); |
250 | ERR_R_MALLOC_FAILURE); | ||
251 | goto err; | 245 | goto err; |
252 | } | 246 | } |
253 | want -= chunk; | 247 | want -= chunk; |
254 | while (chunk > 0) { | 248 | while (chunk > 0) { |
255 | i = BIO_read(in, &(b->data[len]), chunk); | 249 | i = BIO_read(in, &(b->data[len]), chunk); |
256 | if (i <= 0) { | 250 | if (i <= 0) { |
257 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, | 251 | ASN1error(ASN1_R_NOT_ENOUGH_DATA); |
258 | ASN1_R_NOT_ENOUGH_DATA); | ||
259 | goto err; | 252 | goto err; |
260 | } | 253 | } |
261 | /* | 254 | /* |
@@ -270,7 +263,7 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
270 | } | 263 | } |
271 | } | 264 | } |
272 | if (off + c.slen < off) { | 265 | if (off + c.slen < off) { |
273 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, ASN1_R_TOO_LONG); | 266 | ASN1error(ASN1_R_TOO_LONG); |
274 | goto err; | 267 | goto err; |
275 | } | 268 | } |
276 | off += c.slen; | 269 | off += c.slen; |
@@ -282,7 +275,7 @@ asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) | |||
282 | } | 275 | } |
283 | 276 | ||
284 | if (off > INT_MAX) { | 277 | if (off > INT_MAX) { |
285 | ASN1err(ASN1_F_ASN1_D2I_READ_BIO, ASN1_R_TOO_LONG); | 278 | ASN1error(ASN1_R_TOO_LONG); |
286 | goto err; | 279 | goto err; |
287 | } | 280 | } |
288 | 281 | ||