diff options
author | emboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-22 00:19:32 +0000 |
---|---|---|
committer | emboss <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-07-22 00:19:32 +0000 |
commit | ea74a92bedb9eaba56725b87841fa8b7eb97a46d (patch) | |
tree | 77f3ef75cab1b0da8a41091abf60f2a728a34552 | |
parent | d9a7509b974278c4d6cfefc1f9b072e610d66d35 (diff) |
* backport r32604 from trunk.
* ext/openssl/ossl_engine.c: Avoid double free of ENGINE reference.
* test/openssl/test_engine.rb: Add a test for it.
Thanks to Ippei Obayashi for providing the patch.
[ Ruby 1.9 - Bug #5062 ] [ruby-dev:44173]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@32605 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ext/openssl/ossl_engine.c | 6 | ||||
-rw-r--r-- | test/openssl/test_engine.rb | 15 |
3 files changed, 29 insertions, 1 deletions
@@ -1,3 +1,12 @@ +Fri Jul 22 09:17:43 2011 Martin Bosslet <Martin.Bosslet@googlemail.com> + + * backport r32604 from trunk. + + * ext/openssl/ossl_engine.c: Avoid double free of ENGINE reference. + * test/openssl/test_engine.rb: Add a test for it. + Thanks to Ippei Obayashi for providing the patch. + [ Ruby 1.9 - Bug #5062 ] [ruby-dev:44173] + Fri Jul 22 06:39:34 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca> * lib/csv.rb: Do not modify CSV.generate's argument [ruby-core:38356] diff --git a/ext/openssl/ossl_engine.c b/ext/openssl/ossl_engine.c index 111e418f91..79f51b8cdb 100644 --- a/ext/openssl/ossl_engine.c +++ b/ext/openssl/ossl_engine.c @@ -115,7 +115,11 @@ ossl_engine_s_engines(VALUE klass) ary = rb_ary_new(); for(e = ENGINE_get_first(); e; e = ENGINE_get_next(e)){ - WrapEngine(klass, obj, e); + /* Need a ref count of two here because of ENGINE_free being + * called internally by OpenSSL when moving to the next ENGINE + * and by us when releasing the ENGINE reference */ + ENGINE_up_ref(e); + WrapEngine(klass, obj, e); rb_ary_push(ary, obj); } diff --git a/test/openssl/test_engine.rb b/test/openssl/test_engine.rb new file mode 100644 index 0000000000..6d90e34398 --- /dev/null +++ b/test/openssl/test_engine.rb @@ -0,0 +1,15 @@ +require_relative 'utils' + +if defined?(OpenSSL) + +class OpenSSL::TestEngine < Test::Unit::TestCase + + def test_engines_free # [ruby-dev:44173] + OpenSSL::Engine.load + OpenSSL::Engine.engines + OpenSSL::Engine.engines + end + +end + +end |