Skip to content

Commit 1e51fe1

Browse files
committed
(really) reproducing BC provider leakage on X.509 cert factory
GH-94
1 parent 26a7b92 commit 1e51fe1

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/test/ruby/test_security_helper.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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

Comments
 (0)