From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: poffice@blade.nagaokaut.ac.jp Delivered-To: poffice@blade.nagaokaut.ac.jp Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (Postfix) with ESMTP id 0134117CF279 for ; Mon, 29 Apr 2013 07:27:03 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (smtp.nagaokaut.ac.jp [133.44.2.201]) by kankan.nagaokaut.ac.jp (Postfix) with ESMTP id B097DEA6D1D for ; Mon, 29 Apr 2013 07:03:12 +0900 (JST) Received: from funfun.nagaokaut.ac.jp (localhost.nagaokaut.ac.jp [127.0.0.1]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id A6EB597A855 for ; Mon, 29 Apr 2013 07:03:12 +0900 (JST) X-Virus-Scanned: amavisd-new at nagaokaut.ac.jp Received: from funfun.nagaokaut.ac.jp ([127.0.0.1]) by funfun.nagaokaut.ac.jp (funfun.nagaokaut.ac.jp [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ufRpBUkdRYse for ; Mon, 29 Apr 2013 07:03:12 +0900 (JST) Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by funfun.nagaokaut.ac.jp (Postfix) with ESMTP id 6CE7497A853 for ; Mon, 29 Apr 2013 07:03:12 +0900 (JST) Received: from carbon.ruby-lang.org (carbon.ruby-lang.org [221.186.184.68]) by voscc.nagaokaut.ac.jp (Postfix) with ESMTP id 9C1B995241B for ; Mon, 29 Apr 2013 07:03:09 +0900 (JST) Received: from beryllium.ruby-lang.org (beryllium.ruby-lang.org [127.0.0.1]) by carbon.ruby-lang.org (Postfix) with ESMTP id F215A3C21ED68; Mon, 29 Apr 2013 07:03:07 +0900 (JST) Received: from fluorine.ruby-lang.org (www.rubyist.net [210.251.121.216]) by carbon.ruby-lang.org (Postfix) with ESMTP id 988CA3C21ED64 for ; Mon, 29 Apr 2013 07:03:06 +0900 (JST) Received: from ruby-lang.org (localhost [127.0.0.1]) by fluorine.ruby-lang.org (Postfix) with ESMTP id 854823F432 for ; Mon, 29 Apr 2013 07:03:06 +0900 (JST) Delivered-To: ruby-core@ruby-lang.org Date: Mon, 29 Apr 2013 07:03:06 +0900 Posted: Mon, 29 Apr 2013 07:03:06 +0900 From: "nagachika (Tomoyuki Chikanaga)" Reply-To: ruby-core@ruby-lang.org Subject: [ruby-core:54677] [ruby-trunk - Bug #8337] Test failure and memory leak with OpenSSL::BN To: ruby-core@ruby-lang.org Message-Id: References: X-ML-Name: ruby-core X-Mail-Count: 54677 X-MLServer: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post) X-ML-Info: If you have a question, send e-mail with the body "help" (without quotes) to the address ruby-core-ctl@ruby-lang.org; help= X-Mailer: Redmine X-Redmine-Issue-Author: h.shirosaki X-Redmine-Issue-Assignee: h.shirosaki X-Auto-Response-Suppress: OOF X-Redmine-Issue-Id: 8337 X-Redmine-Mailinglistintegration-Message-Ids: 27923 X-Redmine-Project: ruby-trunk Auto-Submitted: auto-generated X-Redmine-Site: Ruby Issue Tracking System X-Redmine-Host: bugs.ruby-lang.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Precedence: bulk List-Id: ruby-core.ruby-lang.org List-Software: fml [fml 4.0.3 release (20011202/4.0.3)] List-Post: List-Owner: List-Help: List-Unsubscribe: Issue #8337 has been updated by nagachika (Tomoyuki Chikanaga). oh... I'm sorry for bother you. ---------------------------------------- Bug #8337: Test failure and memory leak with OpenSSL::BN https://bugs.ruby-lang.org/issues/8337#change-39019 Author: h.shirosaki (Hiroshi Shirosaki) Status: Closed Priority: Normal Assignee: h.shirosaki (Hiroshi Shirosaki) Category: ext Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-04-27 trunk 40468) [x86_64-darwin12.3.0] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN I noticed test failure of test_to_bn. http://ci.rubyinstaller.org/job/ruby-trunk-x64-test-all/1137/console 1) Failure: test_to_bn(OpenSSL::TestBN) [C:/Users/Worker/Jenkins/workspace/ruby-trunk-x64-build/test/openssl/test_bn.rb:36]: <#> expected but was <#>. sizeof(VALUE) of the following code looks wrong because sizeof(VALUE) > sizeof(long) on x64 Windows. https://github.com/ruby/ruby/blob/8b29525dadeaba1ba6dc2a9ea5e590aa9d1d825a/ext/openssl/ossl_bn.c#L130 And ALLOC_N() may need xfree(). I've confirmed memory leak with the following script. $ ruby -rOpenSSL -e 'loop { 1.to_bn }' Here is a patch to fix above issues. diff --git a/ext/openssl/ossl_bn.c b/ext/openssl/ossl_bn.c index 4e9734e..3d8e095 100644 --- a/ext/openssl/ossl_bn.c +++ b/ext/openssl/ossl_bn.c @@ -127,15 +127,17 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self) long n = FIX2LONG(str); unsigned long un = labs(n); - for (i = sizeof(VALUE) - 1; 0 <= i; i--) { + for (i = sizeof(long) - 1; 0 <= i; i--) { bin[i] = un&0xff; un >>= 8; } GetBN(self, bn); if (!BN_bin2bn(bin, sizeof(long), bn)) { + xfree(bin); ossl_raise(eBNError, NULL); } + xfree(bin); if (n < 0) BN_set_negative(bn, 1); return self; } @@ -154,8 +156,10 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self) GetBN(self, bn); if (!BN_bin2bn(bin, (int)sizeof(BDIGIT)*RBIGNUM_LENINT(str), bn)) { + xfree(bin); ossl_raise(eBNError, NULL); } + xfree(bin); if (!RBIGNUM_SIGN(str)) BN_set_negative(bn, 1); return self; } -- http://bugs.ruby-lang.org/