提交 c0e0b6ca 编写于 作者: X xuelei

7153184: NullPointerException when calling SSLEngineImpl.getSupportedCipherSuites

Reviewed-by: weijun
上级 ad3bbfba
...@@ -267,12 +267,15 @@ public abstract class SSLContextImpl extends SSLContextSpi { ...@@ -267,12 +267,15 @@ public abstract class SSLContextImpl extends SSLContextSpi {
// Get suported CipherSuiteList. // Get suported CipherSuiteList.
CipherSuiteList getSuportedCipherSuiteList() { CipherSuiteList getSuportedCipherSuiteList() {
// Clear cache of available ciphersuites. // The maintenance of cipher suites needs to be synchronized.
clearAvailableCache(); synchronized (this) {
// Clear cache of available ciphersuites.
if (supportedCipherSuiteList == null) { clearAvailableCache();
supportedCipherSuiteList =
getApplicableCipherSuiteList(getSuportedProtocolList(), false); if (supportedCipherSuiteList == null) {
supportedCipherSuiteList = getApplicableCipherSuiteList(
getSuportedProtocolList(), false);
}
} }
return supportedCipherSuiteList; return supportedCipherSuiteList;
...@@ -280,20 +283,29 @@ public abstract class SSLContextImpl extends SSLContextSpi { ...@@ -280,20 +283,29 @@ public abstract class SSLContextImpl extends SSLContextSpi {
// Get default CipherSuiteList. // Get default CipherSuiteList.
CipherSuiteList getDefaultCipherSuiteList(boolean roleIsServer) { CipherSuiteList getDefaultCipherSuiteList(boolean roleIsServer) {
// Clear cache of available ciphersuites.
clearAvailableCache();
if (roleIsServer) { if (roleIsServer) {
if (defaultServerCipherSuiteList == null) { // The maintenance of cipher suites needs to be synchronized.
defaultServerCipherSuiteList = getApplicableCipherSuiteList( synchronized (this) {
// Clear cache of available ciphersuites.
clearAvailableCache();
if (defaultServerCipherSuiteList == null) {
defaultServerCipherSuiteList = getApplicableCipherSuiteList(
getDefaultProtocolList(true), true); getDefaultProtocolList(true), true);
}
} }
return defaultServerCipherSuiteList; return defaultServerCipherSuiteList;
} else { } else {
if (defaultClientCipherSuiteList == null) { // The maintenance of cipher suites needs to be synchronized
defaultClientCipherSuiteList = getApplicableCipherSuiteList( synchronized (this) {
// Clear cache of available ciphersuites.
clearAvailableCache();
if (defaultClientCipherSuiteList == null) {
defaultClientCipherSuiteList = getApplicableCipherSuiteList(
getDefaultProtocolList(false), true); getDefaultProtocolList(false), true);
}
} }
return defaultClientCipherSuiteList; return defaultClientCipherSuiteList;
...@@ -364,8 +376,11 @@ public abstract class SSLContextImpl extends SSLContextSpi { ...@@ -364,8 +376,11 @@ public abstract class SSLContextImpl extends SSLContextSpi {
* Clear cache of available ciphersuites. If we support all ciphers * Clear cache of available ciphersuites. If we support all ciphers
* internally, there is no need to clear the cache and calling this * internally, there is no need to clear the cache and calling this
* method has no effect. * method has no effect.
*
* Note that every call to clearAvailableCache() and the maintenance of
* cipher suites need to be synchronized with this instance.
*/ */
synchronized void clearAvailableCache() { private void clearAvailableCache() {
if (CipherSuite.DYNAMIC_AVAILABILITY) { if (CipherSuite.DYNAMIC_AVAILABILITY) {
supportedCipherSuiteList = null; supportedCipherSuiteList = null;
defaultServerCipherSuiteList = null; defaultServerCipherSuiteList = null;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册