From 33be1ef33bf1735473693a1ebb7858360134ada6 Mon Sep 17 00:00:00 2001 From: HoneyryderChuck Date: Sat, 19 Oct 2024 17:14:42 +0100 Subject: [PATCH] ossl config: shareable when frozen should proobably be initialized as frozen, given no state modifications --- ext/openssl/ossl_config.c | 6 +++--- test/openssl/test_config.rb | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ext/openssl/ossl_config.c b/ext/openssl/ossl_config.c index 203d7ef29..3dcf0bdc1 100644 --- a/ext/openssl/ossl_config.c +++ b/ext/openssl/ossl_config.c @@ -22,7 +22,7 @@ static const rb_data_type_t ossl_config_type = { { 0, nconf_free, }, - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE, }; CONF * @@ -136,8 +136,8 @@ config_initialize(int argc, VALUE *argv, VALUE self) VALUE filename; /* 0-arguments call has no use-case, but is kept for compatibility */ - rb_scan_args(argc, argv, "01", &filename); rb_check_frozen(self); + rb_scan_args(argc, argv, "01", &filename); if (!NIL_P(filename)) { BIO *bio = BIO_new_file(StringValueCStr(filename), "rb"); if (!bio) @@ -453,6 +453,6 @@ Init_ossl_config(void) * The default system configuration file for OpenSSL. */ path = CONF_get1_default_config_file(); - path_str = ossl_buf2str(path, rb_long2int(strlen(path))); + path_str = rb_obj_freeze(ossl_buf2str(path, rb_long2int(strlen(path)))); rb_define_const(cConfig, "DEFAULT_CONFIG_FILE", path_str); } diff --git a/test/openssl/test_config.rb b/test/openssl/test_config.rb index 6dbb9c613..1c506099e 100644 --- a/test/openssl/test_config.rb +++ b/test/openssl/test_config.rb @@ -273,6 +273,14 @@ def test_dup assert_equal(@it.sections.sort, c2.sections.sort) end + if respond_to?(:ractor) + ractor + def test_ractor + assert Ractor.shareable?(OpenSSL::Config.parse("[empty]\n").freeze) + assert Ractor.shareable?(OpenSSL::Config::DEFAULT_CONFIG_FILE) + end + end + private def in_tmpdir(*args)