Waterfall/BungeeCord-Patches/0029-Dump-the-raw-hex-of-a-packet-on-a-decoding-error.patch
Shane Freeder 8d41d21148
Updated Upstream (BungeeCord)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

BungeeCord Changes:
653f1691 Print full stack trace for packet decoder errors
3cb7a127 #3527: Switching between servers causes a decoding error
2023-09-25 22:30:58 +01:00

58 lines
2.5 KiB
Diff

From d7ca4dd7a639155cacd0315119bf643584cf2da8 Mon Sep 17 00:00:00 2001
From: Techcable <Techcable@techcable.net>
Date: Thu, 4 Aug 2016 19:30:49 -0700
Subject: [PATCH] Dump the raw hex of a packet on a decoding error
diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
index 76a3ddd0..2aeca781 100644
--- a/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
+++ b/protocol/src/main/java/net/md_5/bungee/protocol/MinecraftDecoder.java
@@ -1,7 +1,9 @@
package net.md_5.bungee.protocol;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.DecoderException;
import io.netty.handler.codec.MessageToMessageDecoder;
import java.util.List;
import lombok.AllArgsConstructor;
@@ -40,13 +42,16 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
Protocol.DirectionData prot = ( server ) ? protocol.TO_SERVER : protocol.TO_CLIENT;
ByteBuf slice = in.copy(); // Can't slice this one due to EntityMap :(
+ Object packetTypeInfo = null;
try
{
int packetId = DefinedPacket.readVarInt( in );
+ packetTypeInfo = packetId;
DefinedPacket packet = prot.createPacket( packetId, protocolVersion, supportsForge );
if ( packet != null )
{
+ packetTypeInfo = packet.getClass();
packet.read( in, prot.getDirection(), protocolVersion );
if ( in.isReadable() )
@@ -60,6 +65,16 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
out.add( new PacketWrapper( packet, slice, protocol ) );
slice = null;
+ } catch (BadPacketException | IndexOutOfBoundsException e) {
+ final String packetTypeStr;
+ if (packetTypeInfo instanceof Integer) {
+ packetTypeStr = "id " + Integer.toHexString((Integer) packetTypeInfo);
+ } else if (packetTypeInfo instanceof Class) {
+ packetTypeStr = "class " + ((Class) packetTypeInfo).getSimpleName();
+ } else {
+ packetTypeStr = "unknown";
+ }
+ throw new DecoderException("Error decoding packet " + packetTypeStr + " with contents:\n" + ByteBufUtil.prettyHexDump(slice), e);
} finally
{
if ( slice != null )
--
2.42.0