diff options
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 6c00b0d336..4641ac92d0 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_cert.c,v 1.74 2019/03/25 17:33:26 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.75 2019/04/13 18:04:05 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 | * |
@@ -466,17 +466,23 @@ SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk) | |||
466 | { | 466 | { |
467 | int i; | 467 | int i; |
468 | STACK_OF(X509_NAME) *ret; | 468 | STACK_OF(X509_NAME) *ret; |
469 | X509_NAME *name; | 469 | X509_NAME *name = NULL; |
470 | |||
471 | if ((ret = sk_X509_NAME_new_null()) == NULL) | ||
472 | goto err; | ||
470 | 473 | ||
471 | ret = sk_X509_NAME_new_null(); | ||
472 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { | 474 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
473 | name = X509_NAME_dup(sk_X509_NAME_value(sk, i)); | 475 | if ((name = X509_NAME_dup(sk_X509_NAME_value(sk, i))) == NULL) |
474 | if ((name == NULL) || !sk_X509_NAME_push(ret, name)) { | 476 | goto err; |
475 | sk_X509_NAME_pop_free(ret, X509_NAME_free); | 477 | if (!sk_X509_NAME_push(ret, name)) |
476 | return (NULL); | 478 | goto err; |
477 | } | ||
478 | } | 479 | } |
479 | return (ret); | 480 | return (ret); |
481 | |||
482 | err: | ||
483 | X509_NAME_free(name); | ||
484 | sk_X509_NAME_pop_free(ret, X509_NAME_free); | ||
485 | return NULL; | ||
480 | } | 486 | } |
481 | 487 | ||
482 | void | 488 | void |