diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb index cca06e6..ecaf480 100644 --- a/lib/net/smtp.rb +++ b/lib/net/smtp.rb @@ -626,7 +626,7 @@ def start(*args, helo: nil, user: nil, secret: nil, password: nil, authtype: nil secret ||= password || args[2] authtype ||= args[3] if defined?(OpenSSL::VERSION) - ssl_context_params = @ssl_context_params || {} + ssl_context_params = @ssl_context_params&.dup || {} unless ssl_context_params.has_key?(:verify_mode) ssl_context_params[:verify_mode] = @tls_verify ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE end diff --git a/test/net/smtp/test_sslcontext.rb b/test/net/smtp/test_sslcontext.rb index 7563d60..fa279da 100644 --- a/test/net/smtp/test_sslcontext.rb +++ b/test/net/smtp/test_sslcontext.rb @@ -222,5 +222,16 @@ def test_ssl_context_params_after_initialize smtp.start assert_equal(123, smtp.__ssl_context.timeout) end + + def test_frozen_ssl_context_params + params = {}.freeze + smtp = SMTP.new("example.invalid", starttls: false) + smtp.ssl_context_params = params + smtp.define_singleton_method(:do_start) { |*| @started = true } + smtp.define_singleton_method(:do_finish) { @started = false } + + assert_equal :started, smtp.start { :started } + assert_equal({}, params) + end end end