Skip to content

Commit f3f3459

Browse files
IosSslSocket: deplete the SSL buffer before issuing a new read.
Recommended here: google#998 (comment) More details in the same thread: google#998 (comment) Change on 2018/11/27 by antoniocortes <[email protected]> ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=223006145
1 parent 1ff7977 commit f3f3459

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

jre_emul/Classes/com/google/j2objc/net/ssl/IosSslSocket.m

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,18 @@ - (jint)readWithByteArray:(IOSByteArray *)b
8383
OSStatus status;
8484

8585
[_socket startHandshake];
86+
87+
// Deplete the SSL buffer before issuing a new read.
88+
size_t available = 0;
89+
checkStatus(SSLGetBufferedReadSize(_socket->_sslContext, &available));
90+
if (available != 0) {
91+
len = MIN(((jint) available), len);
92+
}
93+
8694
@synchronized (_socket) {
8795
do {
88-
size_t temp;
89-
status = SSLRead(_socket->_sslContext, b->buffer_ + off, len, &temp);
90-
off += temp;
91-
len -= temp;
92-
processed += temp;
93-
// if less data than requested was actually transferred then, keep calling SSLRead until
94-
// something different from errSSLWouldBlock is returned.
95-
} while (status == errSSLWouldBlock);
96+
status = SSLRead(_socket->_sslContext, b->buffer_ + off, len, &processed);
97+
} while (status == errSSLWouldBlock && processed == 0);
9698
}
9799

98100
if (status == errSSLClosedGraceful || status == errSSLClosedAbort) {

0 commit comments

Comments
 (0)