fixed memory leak in encryption codec

This commit is contained in:
Dank074 2020-11-28 20:34:36 -06:00
parent 46c8e9fc62
commit 366f7ebb87
2 changed files with 12 additions and 15 deletions

View File

@ -17,13 +17,13 @@ public class GameByteDecryption extends ByteToMessageDecoder {
@Override @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
// Read all available bytes. // Read all available bytes.
byte[] data = in.readBytes(in.readableBytes()).array(); ByteBuf data = in.readBytes(in.readableBytes());
// Decrypt. // Decrypt.
ctx.channel().attr(GameServerAttributes.CRYPTO_CLIENT).get().parse(data); ctx.channel().attr(GameServerAttributes.CRYPTO_CLIENT).get().parse(data.array());
// Continue in the pipeline. // Continue in the pipeline.
out.add(Unpooled.wrappedBuffer(data)); out.add(data);
} }
} }

View File

@ -6,28 +6,25 @@ import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise; import io.netty.channel.ChannelPromise;
import io.netty.util.ReferenceCountUtil;
public class GameByteEncryption extends ChannelOutboundHandlerAdapter { public class GameByteEncryption extends ChannelOutboundHandlerAdapter {
@Override @Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
// Convert msg to ByteBuf. // convert to Bytebuf
ByteBuf out = (ByteBuf) msg; ByteBuf in = (ByteBuf) msg;
// Read all available bytes. // read available bytes
byte[] data; ByteBuf data = (in).readBytes(in.readableBytes());
if (out.hasArray()) { //release old object
data = out.array(); ReferenceCountUtil.release(in);
} else {
data = out.readBytes(out.readableBytes()).array();
}
// Encrypt. // Encrypt.
ctx.channel().attr(GameServerAttributes.CRYPTO_SERVER).get().parse(data); ctx.channel().attr(GameServerAttributes.CRYPTO_SERVER).get().parse(data.array());
// Continue in the pipeline. // Continue in the pipeline.
ctx.write(Unpooled.wrappedBuffer(data)); ctx.write(data, promise);
} }
} }