mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/openssl] x509store: explicitly call rb_gc_mark() against Store/StoreContext
We store the reverse reference to the Ruby object in the OpenSSL struct for use from OpenSSL callback functions. To prevent the Ruby object from being relocated by GC.compact, we must "pin" it by calling rb_gc_mark(). https://github.com/ruby/openssl/commit/a6ba9f894f
This commit is contained in:
parent
ca28545b51
commit
f6612203fa
1 changed files with 23 additions and 15 deletions
|
@ -112,6 +112,13 @@ VALUE cX509Store;
|
|||
VALUE cX509StoreContext;
|
||||
VALUE eX509StoreError;
|
||||
|
||||
static void
|
||||
ossl_x509store_mark(void *ptr)
|
||||
{
|
||||
X509_STORE *store = ptr;
|
||||
rb_gc_mark((VALUE)X509_STORE_get_ex_data(store, store_ex_verify_cb_idx));
|
||||
}
|
||||
|
||||
static void
|
||||
ossl_x509store_free(void *ptr)
|
||||
{
|
||||
|
@ -121,7 +128,7 @@ ossl_x509store_free(void *ptr)
|
|||
static const rb_data_type_t ossl_x509store_type = {
|
||||
"OpenSSL/X509/STORE",
|
||||
{
|
||||
0, ossl_x509store_free,
|
||||
ossl_x509store_mark, ossl_x509store_free,
|
||||
},
|
||||
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
||||
};
|
||||
|
@ -493,23 +500,16 @@ ossl_x509store_verify(int argc, VALUE *argv, VALUE self)
|
|||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Public Functions
|
||||
*/
|
||||
static void ossl_x509stctx_free(void*);
|
||||
|
||||
|
||||
static const rb_data_type_t ossl_x509stctx_type = {
|
||||
"OpenSSL/X509/STORE_CTX",
|
||||
{
|
||||
0, ossl_x509stctx_free,
|
||||
},
|
||||
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Private functions
|
||||
*/
|
||||
static void
|
||||
ossl_x509stctx_mark(void *ptr)
|
||||
{
|
||||
X509_STORE_CTX *ctx = ptr;
|
||||
rb_gc_mark((VALUE)X509_STORE_CTX_get_ex_data(ctx, stctx_ex_verify_cb_idx));
|
||||
}
|
||||
|
||||
static void
|
||||
ossl_x509stctx_free(void *ptr)
|
||||
{
|
||||
|
@ -521,6 +521,14 @@ ossl_x509stctx_free(void *ptr)
|
|||
X509_STORE_CTX_free(ctx);
|
||||
}
|
||||
|
||||
static const rb_data_type_t ossl_x509stctx_type = {
|
||||
"OpenSSL/X509/STORE_CTX",
|
||||
{
|
||||
ossl_x509stctx_mark, ossl_x509stctx_free,
|
||||
},
|
||||
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
||||
};
|
||||
|
||||
static VALUE
|
||||
ossl_x509stctx_alloc(VALUE klass)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue