From 61060264e55727dc6f656deaa29f598a9b574904 Mon Sep 17 00:00:00 2001 From: sanjomo Date: Wed, 18 Mar 2026 12:48:52 +0530 Subject: [PATCH] Avoid reading released ByteBuf in InPacketHandler Add guards to avoid accessing a ByteBuf that has been released: return early if content.refCnt() <= 0 and break the processing loop if the buffer is released mid-loop. Cache the incoming message string into debugData for trace/error logging so we don't attempt to read the ByteBuf in the catch block. Also tidy the method signature to use the imported ChannelHandlerContext type. --- .../socketio/handler/InPacketHandler.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/netty-socketio-core/src/main/java/com/socketio4j/socketio/handler/InPacketHandler.java b/netty-socketio-core/src/main/java/com/socketio4j/socketio/handler/InPacketHandler.java index f119eaab..14232803 100644 --- a/netty-socketio-core/src/main/java/com/socketio4j/socketio/handler/InPacketHandler.java +++ b/netty-socketio-core/src/main/java/com/socketio4j/socketio/handler/InPacketHandler.java @@ -56,18 +56,28 @@ public InPacketHandler(PacketListener packetListener, PacketDecoder decoder, Nam } @Override - protected void channelRead0(io.netty.channel.ChannelHandlerContext ctx, PacketsMessage message) + protected void channelRead0(ChannelHandlerContext ctx, PacketsMessage message) throws Exception { ByteBuf content = message.getContent(); ClientHead client = message.getClient(); + if (content.refCnt() <= 0) { + return; + } + + String debugData = null; + if (log.isTraceEnabled()) { - log.trace("In message: {} sessionId: {}", content.toString(CharsetUtil.UTF_8), client.getSessionId()); + debugData = content.toString(CharsetUtil.UTF_8); + log.trace("In message: {} sessionId: {}", debugData, client.getSessionId()); } int packetsProcessed = 0; while (content.isReadable()) { try { + if (content.refCnt() <= 0) { + break; + } Packet packet = decoder.decodePackets(content, client); packetsProcessed++; @@ -128,8 +138,8 @@ protected void channelRead0(io.netty.channel.ChannelHandlerContext ctx, PacketsM client.getSessionId(), ns.getName()); } } catch (Exception ex) { - String c = content.toString(CharsetUtil.UTF_8); - log.error("Error during data processing. Client sessionId: {}, data: {}", client.getSessionId(), c, ex); + log.error("Error during data processing. Client sessionId: {}, data: {}", + client.getSessionId(), (debugData != null ? debugData : "NULL"), ex); throw ex; } }