THRIFT-2293 java: TSSLTransportFactory.createSSLContext() leaves files open
Patch: Venura
diff --git a/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java b/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java
old mode 100644
new mode 100755
index 25df97f..044e06a
--- a/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java
+++ b/lib/java/src/org/apache/thrift/transport/TSSLTransportFactory.java
@@ -20,6 +20,7 @@
package org.apache.thrift.transport;
import java.io.FileInputStream;
+import java.io.IOException;
import java.net.InetAddress;
import java.security.KeyStore;
@@ -168,6 +169,8 @@
private static SSLContext createSSLContext(TSSLTransportParameters params) throws TTransportException {
SSLContext ctx;
+ FileInputStream fin = null;
+
try {
ctx = SSLContext.getInstance(params.protocol);
TrustManagerFactory tmf = null;
@@ -176,14 +179,16 @@
if (params.isTrustStoreSet) {
tmf = TrustManagerFactory.getInstance(params.trustManagerType);
KeyStore ts = KeyStore.getInstance(params.trustStoreType);
- ts.load(new FileInputStream(params.trustStore), params.trustPass.toCharArray());
+ fin = new FileInputStream(params.trustStore);
+ ts.load(fin, params.trustPass.toCharArray());
tmf.init(ts);
}
if (params.isKeyStoreSet) {
kmf = KeyManagerFactory.getInstance(params.keyManagerType);
KeyStore ks = KeyStore.getInstance(params.keyStoreType);
- ks.load(new FileInputStream(params.keyStore), params.keyPass.toCharArray());
+ fin = new FileInputStream(params.keyStore);
+ ks.load(fin, params.keyPass.toCharArray());
kmf.init(ks, params.keyPass.toCharArray());
}
@@ -199,7 +204,16 @@
} catch (Exception e) {
throw new TTransportException("Error creating the transport", e);
+ } finally {
+ if (fin != null) {
+ try {
+ fin.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
+
return ctx;
}