Waterfall/BungeeCord-Patches/0030-Dump-the-raw-hex-of-a-packet-on-a-decoding-error.patch
_tomcraft 85c0a35f0b
Updated Upstream (BungeeCord) (#695)
Upstream has released updates that appears 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:
6613aaea Add test fix for library classes being visible to non-dependent plugins
53ce6b93 #3200: Fix protocol for 21w40a
d8e29384 #2466: Use switch in "BungeeCord" plugin message handling
5cf869df #3198: Remove terminally deprecated SecurityManager
f26f7d88 Add optional 1.18 (21w40a) snapshot protocol support
2021-10-09 10:43:12 +01:00

58 lines
2.5 KiB
Diff

From a74bf9b63a72510f15b4a3aec96d28209348538b 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 5e03e175..961887c9 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;
@@ -38,13 +40,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() )
@@ -58,6 +63,16 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
out.add( new PacketWrapper( packet, slice ) );
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.30.1 (Apple Git-130)