aboutsummaryrefslogtreecommitdiffstats
path: root/ext/openssl
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2020-08-08 23:00:10 +0900
committerKazuki Yamaguchi <k@rhe.jp>2020-08-12 18:12:30 +0900
commitfa1da69f92598e37c8d9f81e52bf4feec1cf9c71 (patch)
treeb44e3070dc92ddbdbb61aa9e9f8d8245abf13472 /ext/openssl
parentd173700eebafffb9a77ab1b5753b65551d830069 (diff)
downloadruby-openssl-fa1da69f92598e37c8d9f81e52bf4feec1cf9c71.tar.gz
x509store: refactor X509::StoreContext#chain
Use ossl_x509_sk2ary() to create an array of OpenSSL::X509::Certificate from STACK_OF(X509).
Diffstat (limited to 'ext/openssl')
-rw-r--r--ext/openssl/ossl_x509store.c23
1 files changed, 5 insertions, 18 deletions
diff --git a/ext/openssl/ossl_x509store.c b/ext/openssl/ossl_x509store.c
index d29e6f5e..59681488 100644
--- a/ext/openssl/ossl_x509store.c
+++ b/ext/openssl/ossl_x509store.c
@@ -574,26 +574,13 @@ static VALUE
ossl_x509stctx_get_chain(VALUE self)
{
X509_STORE_CTX *ctx;
- STACK_OF(X509) *chain;
- X509 *x509;
- int i, num;
- VALUE ary;
+ const STACK_OF(X509) *chain;
GetX509StCtx(self, ctx);
- if((chain = X509_STORE_CTX_get0_chain(ctx)) == NULL){
- return Qnil;
- }
- if((num = sk_X509_num(chain)) < 0){
- OSSL_Debug("certs in chain < 0???");
- return rb_ary_new();
- }
- ary = rb_ary_new2(num);
- for(i = 0; i < num; i++) {
- x509 = sk_X509_value(chain, i);
- rb_ary_push(ary, ossl_x509_new(x509));
- }
-
- return ary;
+ chain = X509_STORE_CTX_get0_chain(ctx);
+ if (!chain)
+ return Qnil; /* Could be an empty array instead? */
+ return ossl_x509_sk2ary(chain);
}
/*