Skip to content

Commit dde201a

Browse files
committed
properly handle bufferoverflow
1 parent d903cac commit dde201a

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

AndroidAsync/src/com/koushikdutta/async/AsyncSSLSocketWrapper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,27 +78,34 @@ public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
7878
mUnwrapping = true;
7979

8080
ByteBuffer b = ByteBufferList.EMPTY_BYTEBUFFER;
81+
ByteBuffer read = null;
8182
while (true) {
8283
if (b.remaining() == 0 && bb.size() > 0) {
8384
b = bb.remove();
8485
}
8586
int remaining = b.remaining();
8687

87-
ByteBuffer read = ByteBufferList.obtain(remaining * 2);
88+
if (read == null)
89+
read = ByteBufferList.obtain(remaining * 2);
8890

8991
SSLEngineResult res = engine.unwrap(b, read);
9092
addToPending(transformed, read);
9193
if (res.getStatus() == Status.BUFFER_OVERFLOW) {
9294
remaining = -1;
95+
read = ByteBufferList.obtain(read.remaining() * 2);
9396
}
9497
else if (res.getStatus() == Status.BUFFER_UNDERFLOW) {
98+
read = null;
9599
bb.addFirst(b);
96100
if (bb.size() <= 1) {
97101
break;
98102
}
99103
remaining = -1;
100104
b = bb.getAll();
101105
}
106+
else {
107+
read = null;
108+
}
102109
handleResult(res);
103110
if (b.remaining() == remaining) {
104111
bb.addFirst(b);

0 commit comments

Comments
 (0)