diff options
-rw-r--r-- | src/lib/libcrypto/x509/x509_lu.c | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/src/lib/libcrypto/x509/x509_lu.c b/src/lib/libcrypto/x509/x509_lu.c index 0d4f4ad2ff..7bcd5f64de 100644 --- a/src/lib/libcrypto/x509/x509_lu.c +++ b/src/lib/libcrypto/x509/x509_lu.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x509_lu.c,v 1.44 2021/11/05 17:11:28 tb Exp $ */ | 1 | /* $OpenBSD: x509_lu.c,v 1.45 2021/11/05 17:13:14 tb 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 | * |
@@ -237,67 +237,64 @@ X509_OBJECT_free(X509_OBJECT *a) | |||
237 | } | 237 | } |
238 | 238 | ||
239 | void | 239 | void |
240 | X509_STORE_free(X509_STORE *vfy) | 240 | X509_STORE_free(X509_STORE *store) |
241 | { | 241 | { |
242 | int i; | ||
243 | STACK_OF(X509_LOOKUP) *sk; | 242 | STACK_OF(X509_LOOKUP) *sk; |
244 | X509_LOOKUP *lu; | 243 | X509_LOOKUP *lu; |
244 | int i; | ||
245 | 245 | ||
246 | if (vfy == NULL) | 246 | if (store == NULL) |
247 | return; | 247 | return; |
248 | 248 | ||
249 | i = CRYPTO_add(&vfy->references, -1, CRYPTO_LOCK_X509_STORE); | 249 | if (CRYPTO_add(&store->references, -1, CRYPTO_LOCK_X509_STORE) > 0) |
250 | if (i > 0) | ||
251 | return; | 250 | return; |
252 | 251 | ||
253 | sk = vfy->get_cert_methods; | 252 | sk = store->get_cert_methods; |
254 | for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { | 253 | for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { |
255 | lu = sk_X509_LOOKUP_value(sk, i); | 254 | lu = sk_X509_LOOKUP_value(sk, i); |
256 | X509_LOOKUP_shutdown(lu); | 255 | X509_LOOKUP_shutdown(lu); |
257 | X509_LOOKUP_free(lu); | 256 | X509_LOOKUP_free(lu); |
258 | } | 257 | } |
259 | sk_X509_LOOKUP_free(sk); | 258 | sk_X509_LOOKUP_free(sk); |
260 | sk_X509_OBJECT_pop_free(vfy->objs, X509_OBJECT_free); | 259 | sk_X509_OBJECT_pop_free(store->objs, X509_OBJECT_free); |
261 | 260 | ||
262 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data); | 261 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, store, &store->ex_data); |
263 | X509_VERIFY_PARAM_free(vfy->param); | 262 | X509_VERIFY_PARAM_free(store->param); |
264 | free(vfy); | 263 | free(store); |
265 | } | 264 | } |
266 | 265 | ||
267 | int | 266 | int |
268 | X509_STORE_up_ref(X509_STORE *x) | 267 | X509_STORE_up_ref(X509_STORE *store) |
269 | { | 268 | { |
270 | int refs = CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509_STORE); | 269 | return CRYPTO_add(&store->references, 1, CRYPTO_LOCK_X509_STORE) > 1; |
271 | return (refs > 1) ? 1 : 0; | ||
272 | } | 270 | } |
273 | 271 | ||
274 | X509_LOOKUP * | 272 | X509_LOOKUP * |
275 | X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m) | 273 | X509_STORE_add_lookup(X509_STORE *store, X509_LOOKUP_METHOD *method) |
276 | { | 274 | { |
277 | int i; | ||
278 | STACK_OF(X509_LOOKUP) *sk; | 275 | STACK_OF(X509_LOOKUP) *sk; |
279 | X509_LOOKUP *lu; | 276 | X509_LOOKUP *lu; |
277 | int i; | ||
280 | 278 | ||
281 | sk = v->get_cert_methods; | 279 | sk = store->get_cert_methods; |
282 | for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { | 280 | for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { |
283 | lu = sk_X509_LOOKUP_value(sk, i); | 281 | lu = sk_X509_LOOKUP_value(sk, i); |
284 | if (m == lu->method) { | 282 | if (method == lu->method) { |
285 | return lu; | 283 | return lu; |
286 | } | 284 | } |
287 | } | 285 | } |
288 | /* a new one */ | 286 | |
289 | lu = X509_LOOKUP_new(m); | 287 | if ((lu = X509_LOOKUP_new(method)) == NULL) |
290 | if (lu == NULL) | 288 | return NULL; |
289 | |||
290 | lu->store_ctx = store; | ||
291 | if (sk_X509_LOOKUP_push(store->get_cert_methods, lu) <= 0) { | ||
292 | X509error(ERR_R_MALLOC_FAILURE); | ||
293 | X509_LOOKUP_free(lu); | ||
291 | return NULL; | 294 | return NULL; |
292 | else { | ||
293 | lu->store_ctx = v; | ||
294 | if (sk_X509_LOOKUP_push(v->get_cert_methods, lu)) | ||
295 | return lu; | ||
296 | else { | ||
297 | X509_LOOKUP_free(lu); | ||
298 | return NULL; | ||
299 | } | ||
300 | } | 295 | } |
296 | |||
297 | return lu; | ||
301 | } | 298 | } |
302 | 299 | ||
303 | X509_OBJECT * | 300 | X509_OBJECT * |