ruby-changes:33740
From: nagachika <ko1@a...>
Date: Mon, 5 May 2014 02:44:09 +0900 (JST)
Subject: [ruby-changes:33740] nagachika:r45821 (ruby_2_1): merge revision(s) r45595: [Backport #9743] [Backport #9745]
nagachika 2014-05-05 02:44:00 +0900 (Mon, 05 May 2014) New Revision: 45821 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=45821 Log: merge revision(s) r45595: [Backport #9743] [Backport #9745] * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal() finalizes only a copy of the digest context, the context must be cleaned up after initialization by EVP_MD_CTX_cleanup() or a memory leak will occur. [ruby-core:62038] [Bug #9743] Modified directories: branches/ruby_2_1/ Modified files: branches/ruby_2_1/ChangeLog branches/ruby_2_1/ext/openssl/ossl_pkey.c branches/ruby_2_1/test/openssl/test_pkey_rsa.rb branches/ruby_2_1/version.h Index: ruby_2_1/ChangeLog =================================================================== --- ruby_2_1/ChangeLog (revision 45820) +++ ruby_2_1/ChangeLog (revision 45821) @@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/ChangeLog#L1 +Mon May 5 02:35:20 2014 Nobuyoshi Nakada <nobu@r...> + + * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal() + finalizes only a copy of the digest context, the context must be + cleaned up after initialization by EVP_MD_CTX_cleanup() or a + memory leak will occur. [ruby-core:62038] [Bug #9743] + Mon May 5 02:21:48 2014 Nobuyoshi Nakada <nobu@r...> * ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free), Index: ruby_2_1/ext/openssl/ossl_pkey.c =================================================================== --- ruby_2_1/ext/openssl/ossl_pkey.c (revision 45820) +++ ruby_2_1/ext/openssl/ossl_pkey.c (revision 45821) @@ -318,13 +318,16 @@ ossl_pkey_verify(VALUE self, VALUE diges https://github.com/ruby/ruby/blob/trunk/ruby_2_1/ext/openssl/ossl_pkey.c#L318 { EVP_PKEY *pkey; EVP_MD_CTX ctx; + int result; GetPKey(self, pkey); - EVP_VerifyInit(&ctx, GetDigestPtr(digest)); StringValue(sig); StringValue(data); + EVP_VerifyInit(&ctx, GetDigestPtr(digest)); EVP_VerifyUpdate(&ctx, RSTRING_PTR(data), RSTRING_LEN(data)); - switch (EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey)) { + result = EVP_VerifyFinal(&ctx, (unsigned char *)RSTRING_PTR(sig), RSTRING_LENINT(sig), pkey); + EVP_MD_CTX_cleanup(&ctx); + switch (result) { case 0: return Qfalse; case 1: Index: ruby_2_1/version.h =================================================================== --- ruby_2_1/version.h (revision 45820) +++ ruby_2_1/version.h (revision 45821) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_1/version.h#L1 #define RUBY_VERSION "2.1.2" #define RUBY_RELEASE_DATE "2014-05-05" -#define RUBY_PATCHLEVEL 91 +#define RUBY_PATCHLEVEL 92 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 5 Index: ruby_2_1/test/openssl/test_pkey_rsa.rb =================================================================== --- ruby_2_1/test/openssl/test_pkey_rsa.rb (revision 45820) +++ ruby_2_1/test/openssl/test_pkey_rsa.rb (revision 45821) @@ -75,6 +75,36 @@ class OpenSSL::TestPKeyRSA < Test::Unit: https://github.com/ruby/ruby/blob/trunk/ruby_2_1/test/openssl/test_pkey_rsa.rb#L75 assert(key.verify(digest, sig, data)) end + def test_sign_verify_memory_leak + bug9743 = '[ruby-core:62038] [Bug #9743]' + assert_no_memory_leak(%w[-ropenssl], <<-PREP, <<-CODE, bug9743, rss: true) + data = 'Sign me!' + digest = OpenSSL::Digest::SHA512.new + pkey = OpenSSL::PKey::RSA.new(2048) + signature = pkey.sign(digest, data) + pub_key = pkey.public_key + PREP + 20_000.times { + pub_key.verify(digest, signature, data) + } + CODE + + assert_no_memory_leak(%w[-ropenssl], <<-PREP, <<-CODE, bug9743, rss: true) + data = 'Sign me!' + digest = OpenSSL::Digest::SHA512.new + pkey = OpenSSL::PKey::RSA.new(2048) + signature = pkey.sign(digest, data) + pub_key = pkey.public_key + PREP + 20_000.times { + begin + pub_key.verify(digest, signature, 1) + rescue TypeError + end + } + CODE + end + def test_digest_state_irrelevant_sign key = OpenSSL::TestUtils::TEST_KEY_RSA1024 digest1 = OpenSSL::Digest::SHA1.new Property changes on: ruby_2_1 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r45595 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/