merge in lmp-mr1-release history after reset to lmp-mr1-dev
diff --git a/src/main/java/org/conscrypt/OpenSSLEngineImpl.java b/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
index c70abcd..5888188 100644
--- a/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
+++ b/src/main/java/org/conscrypt/OpenSSLEngineImpl.java
@@ -419,6 +419,7 @@
// If we haven't completed the handshake yet, just let the caller know.
HandshakeStatus handshakeStatus = getHandshakeStatus();
if (handshakeStatus == HandshakeStatus.NEED_UNWRAP) {
+ int positionBeforeHandshake = src.position();
OpenSSLBIOSource source = OpenSSLBIOSource.wrap(src);
long sslSessionCtx = 0L;
try {
@@ -433,7 +434,9 @@
getPeerHost(), getPeerPort(), true);
}
int bytesWritten = handshakeSink.position();
- return new SSLEngineResult(Status.OK, getHandshakeStatus(), 0, bytesWritten);
+ int bytesConsumed = (src.position() - positionBeforeHandshake);
+ return new SSLEngineResult((bytesConsumed > 0) ? Status.OK : Status.BUFFER_UNDERFLOW,
+ getHandshakeStatus(), 0, bytesWritten);
} catch (Exception e) {
throw (SSLHandshakeException) new SSLHandshakeException("Handshake failed")
.initCause(e);
@@ -488,7 +491,8 @@
int consumed = srcDuplicate.position() - positionBeforeRead;
src.position(srcDuplicate.position());
- return new SSLEngineResult(Status.OK, getHandshakeStatus(), consumed, produced);
+ return new SSLEngineResult((consumed > 0) ? Status.OK : Status.BUFFER_UNDERFLOW,
+ getHandshakeStatus(), consumed, produced);
} catch (IOException e) {
throw new SSLException(e);
} finally {
diff --git a/src/main/java/org/conscrypt/OpenSSLSocketImpl.java b/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
index c3ecac8..327879d 100644
--- a/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
+++ b/src/main/java/org/conscrypt/OpenSSLSocketImpl.java
@@ -432,7 +432,7 @@
@Override
public int getPort() {
- return peerHostname == null ? super.getPort() : peerPort;
+ return peerPort == -1 ? super.getPort() : peerPort;
}
@Override