Skip to content

Commit 79bc90b

Browse files
committed
Fix buffer leak introduced by 693633e
Motivation: As we not used Unpooled anymore for allocate buffers in Base64.* methods we need to ensure we realease all the buffers. Modifications: Correctly release buffers Result: No more buffer leaks
1 parent 8732745 commit 79bc90b

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

codec-http/src/test/java/io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateDecoderTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ public void testFramementedFrame() {
143143
byte[] finalPayload = new byte[300];
144144
finalPayloadWrapped.readBytes(finalPayload);
145145
assertTrue(Arrays.equals(finalPayload, payload));
146-
uncompressedFrame1.release();
147-
uncompressedFrame2.release();
148-
uncompressedFrame3.release();
146+
finalPayloadWrapped.release();
149147
}
150148

151149
@Test

handler/src/main/java/io/netty/handler/ssl/OpenSslContext.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,9 @@ static long toBIO(PrivateKey key) throws Exception {
488488
ByteBuf buffer = Unpooled.directBuffer();
489489
try {
490490
buffer.writeBytes(BEGIN_PRIVATE_KEY);
491-
buffer.writeBytes(Base64.encode(Unpooled.wrappedBuffer(key.getEncoded()), true));
491+
ByteBuf encoded = Base64.encode(Unpooled.wrappedBuffer(key.getEncoded()), true);
492+
buffer.writeBytes(encoded);
493+
encoded.release();
492494
buffer.writeBytes(END_PRIVATE_KEY);
493495
return newBIO(buffer);
494496
} finally {
@@ -508,7 +510,9 @@ static long toBIO(X509Certificate[] certChain) throws Exception {
508510
try {
509511
for (X509Certificate cert: certChain) {
510512
buffer.writeBytes(BEGIN_CERT);
511-
buffer.writeBytes(Base64.encode(Unpooled.wrappedBuffer(cert.getEncoded()), true));
513+
ByteBuf encoded = Base64.encode(Unpooled.wrappedBuffer(cert.getEncoded()), true);
514+
buffer.writeBytes(encoded);
515+
encoded.release();
512516
buffer.writeBytes(END_CERT);
513517
}
514518
return newBIO(buffer);

handler/src/main/java/io/netty/handler/ssl/util/SelfSignedCertificate.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.netty.handler.ssl.util;
1818

19+
import io.netty.buffer.ByteBuf;
1920
import io.netty.buffer.Unpooled;
2021
import io.netty.handler.codec.base64.Base64;
2122
import io.netty.util.CharsetUtil;
@@ -217,11 +218,11 @@ public void delete() {
217218

218219
static String[] newSelfSignedCertificate(
219220
String fqdn, PrivateKey key, X509Certificate cert) throws IOException, CertificateEncodingException {
220-
221221
// Encode the private key into a file.
222-
String keyText = "-----BEGIN PRIVATE KEY-----\n" +
223-
Base64.encode(Unpooled.wrappedBuffer(key.getEncoded()), true).toString(CharsetUtil.US_ASCII) +
222+
ByteBuf enc = Base64.encode(Unpooled.wrappedBuffer(key.getEncoded()), true);
223+
String keyText = "-----BEGIN PRIVATE KEY-----\n" + enc.toString(CharsetUtil.US_ASCII) +
224224
"\n-----END PRIVATE KEY-----\n";
225+
enc.release();
225226

226227
File keyFile = File.createTempFile("keyutil_" + fqdn + '_', ".key");
227228
keyFile.deleteOnExit();
@@ -238,10 +239,12 @@ static String[] newSelfSignedCertificate(
238239
}
239240
}
240241

242+
ByteBuf encoded = Base64.encode(Unpooled.wrappedBuffer(cert.getEncoded()), true);
241243
// Encode the certificate into a CRT file.
242244
String certText = "-----BEGIN CERTIFICATE-----\n" +
243-
Base64.encode(Unpooled.wrappedBuffer(cert.getEncoded()), true).toString(CharsetUtil.US_ASCII) +
245+
encoded.toString(CharsetUtil.US_ASCII) +
244246
"\n-----END CERTIFICATE-----\n";
247+
encoded.release();
245248

246249
File certFile = File.createTempFile("keyutil_" + fqdn + '_', ".crt");
247250
certFile.deleteOnExit();

0 commit comments

Comments
 (0)