fix a potential ByteBuf leak in HttpProxyHandler. (#10130)
Motivation: An exception may occur between ByteBuf's allocation and release. For example: ```java java.lang.OutOfMemoryError: Java heap space at java.lang.String.<init>(String.java:325) at io.netty.buffer.ByteBufUtil.decodeString(ByteBufUtil.java:838) at io.netty.buffer.AbstractByteBuf.toString(AbstractByteBuf.java:1247) at io.netty.buffer.AbstractByteBuf.toString(AbstractByteBuf.java:1242) at io.netty.handler.proxy.HttpProxyHandler.<init>(HttpProxyHandler.java:105) at io.netty.handler.proxy.HttpProxyHandler.<init>(HttpProxyHandler.java:90) at io.netty.handler.proxy.HttpProxyHandler.<init>(HttpProxyHandler.java:85) ``` It may cause the ByteBuf variable authz and authzBase64's leak. Modification: Release the ByteBuf in a finally block as soon as possible. Result: Fix a potential ByteBuf leak.
This commit is contained in:
parent
913cae6fef
commit
0c3eae34ec
@ -100,12 +100,17 @@ public final class HttpProxyHandler extends ProxyHandler {
|
|||||||
this.password = ObjectUtil.checkNotNull(password, "password");
|
this.password = ObjectUtil.checkNotNull(password, "password");
|
||||||
|
|
||||||
ByteBuf authz = Unpooled.copiedBuffer(username + ':' + password, CharsetUtil.UTF_8);
|
ByteBuf authz = Unpooled.copiedBuffer(username + ':' + password, CharsetUtil.UTF_8);
|
||||||
ByteBuf authzBase64 = Base64.encode(authz, false);
|
ByteBuf authzBase64;
|
||||||
|
try {
|
||||||
authorization = new AsciiString("Basic " + authzBase64.toString(CharsetUtil.US_ASCII));
|
authzBase64 = Base64.encode(authz, false);
|
||||||
|
} finally {
|
||||||
authz.release();
|
authz.release();
|
||||||
authzBase64.release();
|
}
|
||||||
|
try {
|
||||||
|
authorization = new AsciiString("Basic " + authzBase64.toString(CharsetUtil.US_ASCII));
|
||||||
|
} finally {
|
||||||
|
authzBase64.release();
|
||||||
|
}
|
||||||
|
|
||||||
this.outboundHeaders = headers;
|
this.outboundHeaders = headers;
|
||||||
this.ignoreDefaultPortsInConnectHostHeader = ignoreDefaultPortsInConnectHostHeader;
|
this.ignoreDefaultPortsInConnectHostHeader = ignoreDefaultPortsInConnectHostHeader;
|
||||||
|
Loading…
Reference in New Issue
Block a user