Skip to content

Commit 7b2344e

Browse files
committed
TlsChannel fix: Handle zeroing in the BufferHolder
As we use a PowerOfTwoBufferPool the buffer can be greater than maxTlsPacketSize. JAVA-3588
1 parent bf5e210 commit 7b2344e

File tree

1 file changed

+14
-5
lines changed
  • driver-core/src/main/com/mongodb/internal/connection/tlschannel/impl

1 file changed

+14
-5
lines changed

driver-core/src/main/com/mongodb/internal/connection/tlschannel/impl/BufferHolder.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,7 @@ private void resizeImpl(int newCapacity) {
129129
* <p>Typically used for security reasons, with buffers that contains now-unused plaintext.
130130
*/
131131
public void zeroRemaining() {
132-
((Buffer) buffer).mark();
133-
buffer.put(zeros, 0, buffer.remaining());
134-
((Buffer) buffer).reset();
132+
zero(buffer.position());
135133
}
136134

137135
/**
@@ -140,9 +138,20 @@ public void zeroRemaining() {
140138
* <p>Typically used for security reasons, with buffers that contains now-unused plaintext.
141139
*/
142140
public void zero() {
141+
zero(0);
142+
}
143+
144+
private void zero(final int position) {
143145
((Buffer) buffer).mark();
144-
((Buffer) buffer).position(0);
145-
buffer.put(zeros, 0, buffer.remaining());
146+
((Buffer) buffer).position(position);
147+
int size = buffer.remaining();
148+
int length = Math.min(size, zeros.length);
149+
int offset = 0;
150+
while (length > 0) {
151+
buffer.put(zeros, 0, length);
152+
offset = offset + length;
153+
length = Math.min(size - offset, zeros.length);
154+
}
146155
((Buffer) buffer).reset();
147156
}
148157

0 commit comments

Comments
 (0)