1
+ # coding: US-ASCII
2
+ require File . expand_path ( 'test_helper' , File . dirname ( __FILE__ ) )
3
+
4
+ class TestSecurityHelper < TestCase
5
+
6
+ def setup ; require 'openssl' ; require 'java'
7
+ super
8
+ end
9
+
10
+ def test_cert_factory_provider_leak # GH-94
11
+ assert provider = org . jruby . ext . openssl . SecurityHelper . getSecurityProvider
12
+ assert_equal 'BC' , provider . name
13
+ factory1 = org . jruby . ext . openssl . SecurityHelper . getCertificateFactory ( 'X.509' )
14
+ factory2 = org . jruby . ext . openssl . SecurityHelper . getCertificateFactory ( 'X.509' )
15
+ assert_not_same factory1 , factory2
16
+ assert_equal 'BC' , factory1 . provider . name
17
+ assert_equal 'BC' , factory2 . provider . name
18
+ # assert_same factory1.getProvider, factory2.getProvider
19
+
20
+ java . security . cert . CertificateFactory . class_eval do
21
+ field_reader :certFacSpi
22
+ end
23
+
24
+ spi1 = factory1 . certFacSpi ; spi2 = factory2 . certFacSpi
25
+
26
+ if spi1 . is_a? org . bouncycastle . jcajce . provider . asymmetric . x509 . CertificateFactory
27
+ org . bouncycastle . jcajce . provider . asymmetric . x509 . CertificateFactory . class_eval do
28
+ field_reader :bcHelper
29
+ end
30
+ if ( spi1 . bcHelper rescue nil )
31
+ org . bouncycastle . jcajce . util . ProviderJcaJceHelper . class_eval do
32
+ field_reader :provider rescue nil
33
+ end
34
+ if spi1 . bcHelper . respond_to? ( :provider )
35
+ assert_same spi1 . bcHelper . provider , spi2 . bcHelper . provider
36
+ end
37
+ end
38
+ end
39
+ end if defined? JRUBY_VERSION
40
+
41
+ end
0 commit comments