mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
8259662: Don't wrap SocketExceptions into SSLExceptions in SSLSocketImpl
Reviewed-by: xuelei
This commit is contained in:
parent
cf0019d964
commit
63f8fc87cd
7 changed files with 199 additions and 22 deletions
|
@ -74,6 +74,16 @@ import jdk.internal.access.SharedSecrets;
|
|||
public final class SSLSocketImpl
|
||||
extends BaseSSLSocketImpl implements SSLTransport {
|
||||
|
||||
/**
|
||||
* ERROR HANDLING GUIDELINES
|
||||
* (which exceptions to throw and catch and which not to throw and catch)
|
||||
*
|
||||
* - if there is an IOException (SocketException) when accessing the
|
||||
* underlying Socket, pass it through
|
||||
*
|
||||
* - do not throw IOExceptions, throw SSLExceptions (or a subclass)
|
||||
*/
|
||||
|
||||
final SSLContextImpl sslContext;
|
||||
final TransportContext conContext;
|
||||
|
||||
|
@ -446,6 +456,8 @@ public final class SSLSocketImpl
|
|||
throw conContext.fatal(Alert.HANDSHAKE_FAILURE,
|
||||
"Couldn't kickstart handshaking", iioe);
|
||||
}
|
||||
} catch (SocketException se) {
|
||||
handleException(se);
|
||||
} catch (IOException ioe) {
|
||||
throw conContext.fatal(Alert.HANDSHAKE_FAILURE,
|
||||
"Couldn't kickstart handshaking", ioe);
|
||||
|
@ -1405,9 +1417,9 @@ public final class SSLSocketImpl
|
|||
conContext.isNegotiated) {
|
||||
return 0;
|
||||
}
|
||||
} catch (SSLException | InterruptedIOException ssle) {
|
||||
// don't change exception in case of timeouts or interrupts
|
||||
throw ssle;
|
||||
} catch (SSLException | InterruptedIOException | SocketException se) {
|
||||
// don't change exception in case of timeouts or interrupts or SocketException
|
||||
throw se;
|
||||
} catch (IOException ioe) {
|
||||
throw new SSLException("readHandshakeRecord", ioe);
|
||||
}
|
||||
|
@ -1468,9 +1480,9 @@ public final class SSLSocketImpl
|
|||
buffer.position() > 0) {
|
||||
return buffer;
|
||||
}
|
||||
} catch (SSLException | InterruptedIOException ssle) {
|
||||
// don't change exception in case of timeouts or interrupts
|
||||
throw ssle;
|
||||
} catch (SSLException | InterruptedIOException | SocketException se) {
|
||||
// don't change exception in case of timeouts or interrupts or SocketException.
|
||||
throw se;
|
||||
} catch (IOException ioe) {
|
||||
throw new SSLException("readApplicationRecord", ioe);
|
||||
}
|
||||
|
@ -1678,6 +1690,16 @@ public final class SSLSocketImpl
|
|||
}
|
||||
}
|
||||
|
||||
if (cause instanceof SocketException) {
|
||||
try {
|
||||
conContext.fatal(alert, cause);
|
||||
} catch (Exception e) {
|
||||
// Just delivering the fatal alert, re-throw the socket exception instead.
|
||||
}
|
||||
|
||||
throw (SocketException)cause;
|
||||
}
|
||||
|
||||
throw conContext.fatal(alert, cause);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue