Skip to content

Commit 1dcb7ac

Browse files
ndosschematzbot
authored andcommitted
[ruby/openssl] x509store, ssl: check for error of CRYPTO_set_ex_data()
This can technically fail because it internally performs allocations. Also confirmed by the man page [1]. [1] (among other functions on this page) https://docs.openssl.org/3.5/man3/BIO_get_ex_new_index ruby/openssl@c0de3f5c83
1 parent b4c8c8a commit 1dcb7ac

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

ext/openssl/ossl_ssl.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ ossl_sslctx_s_alloc(VALUE klass)
9191
SSL_CTX_set_mode(ctx, mode);
9292
SSL_CTX_set_dh_auto(ctx, 1);
9393
RTYPEDDATA_DATA(obj) = ctx;
94-
SSL_CTX_set_ex_data(ctx, ossl_sslctx_ex_ptr_idx, (void *)obj);
94+
if (!SSL_CTX_set_ex_data(ctx, ossl_sslctx_ex_ptr_idx, (void *)obj))
95+
ossl_raise(eSSLError, "SSL_CTX_set_ex_data");
9596

9697
return obj;
9798
}
@@ -1672,7 +1673,8 @@ ossl_ssl_initialize(int argc, VALUE *argv, VALUE self)
16721673
ossl_raise(eSSLError, NULL);
16731674
RTYPEDDATA_DATA(self) = ssl;
16741675

1675-
SSL_set_ex_data(ssl, ossl_ssl_ex_ptr_idx, (void *)self);
1676+
if (!SSL_set_ex_data(ssl, ossl_ssl_ex_ptr_idx, (void *)self))
1677+
ossl_raise(eSSLError, "SSL_set_ex_data");
16761678
SSL_set_info_callback(ssl, ssl_info_cb);
16771679

16781680
rb_call_super(0, NULL);

ext/openssl/ossl_x509store.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,9 @@ ossl_x509store_set_vfy_cb(VALUE self, VALUE cb)
190190
X509_STORE *store;
191191

192192
GetX509Store(self, store);
193+
if (!X509_STORE_set_ex_data(store, store_ex_verify_cb_idx, (void *)cb))
194+
ossl_raise(eX509StoreError, "X509_STORE_set_ex_data");
193195
rb_iv_set(self, "@verify_callback", cb);
194-
X509_STORE_set_ex_data(store, store_ex_verify_cb_idx, (void *)cb);
195196
RB_OBJ_WRITTEN(self, Qundef, cb);
196197

197198
return cb;
@@ -608,7 +609,8 @@ ossl_x509stctx_verify(VALUE self)
608609

609610
GetX509StCtx(self, ctx);
610611
VALUE cb = rb_iv_get(self, "@verify_callback");
611-
X509_STORE_CTX_set_ex_data(ctx, stctx_ex_verify_cb_idx, (void *)cb);
612+
if (!X509_STORE_CTX_set_ex_data(ctx, stctx_ex_verify_cb_idx, (void *)cb))
613+
ossl_raise(eX509StoreError, "X509_STORE_CTX_set_ex_data");
612614
RB_OBJ_WRITTEN(self, Qundef, cb);
613615

614616
switch (X509_verify_cert(ctx)) {

0 commit comments

Comments
 (0)