From ec554c067caf3b2a7757ec290ea68524a897273e Mon Sep 17 00:00:00 2001 From: kpayson64 Date: Mon, 23 Jan 2017 13:05:08 -0800 Subject: [PATCH] Fix buffer underflow bug (#58) In the event the engine returns BUFFER_UNDERFLOW, and was not able to produce any bytes as a result, the read() returns 0 instead of continuing to read from the socket. --- common/src/main/java/org/conscrypt/OpenSSLEngineSocketImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/org/conscrypt/OpenSSLEngineSocketImpl.java b/common/src/main/java/org/conscrypt/OpenSSLEngineSocketImpl.java index a8bfc60dd..5fd011fcc 100644 --- a/common/src/main/java/org/conscrypt/OpenSSLEngineSocketImpl.java +++ b/common/src/main/java/org/conscrypt/OpenSSLEngineSocketImpl.java @@ -522,7 +522,7 @@ public int read(byte[] b, int off, int len) throws IOException { if (engineResult.getHandshakeStatus() == HandshakeStatus.FINISHED) { completeHandshake(); } - if (engineResult.bytesProduced() == 0) { + if (!needMoreData && engineResult.bytesProduced() == 0) { // Read successfully, but produced no data. Possibly part of a // handshake. return 0;