diff --git a/BungeeCord-Patches/0050-Use-proper-max-length-for-serverbound-chat-packet.patch b/BungeeCord-Patches/0050-Use-proper-max-length-for-serverbound-chat-packet.patch new file mode 100644 index 0000000..df47ff3 --- /dev/null +++ b/BungeeCord-Patches/0050-Use-proper-max-length-for-serverbound-chat-packet.patch @@ -0,0 +1,76 @@ +From 5bc1929e48a551778c0c8e7f596f935c1c562e56 Mon Sep 17 00:00:00 2001 +From: kashike +Date: Wed, 20 Mar 2019 21:39:12 -0700 +Subject: [PATCH] Use proper max length for serverbound chat packet + + +diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java b/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java +index 28a3efde..d2d23b34 100644 +--- a/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java ++++ b/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java +@@ -38,6 +38,34 @@ public abstract class DefinedPacket + return new String( b, Charsets.UTF_8 ); + } + ++ // Waterfall start ++ public static void writeString(String s, final int maxLength, ByteBuf buf) ++ { ++ if ( s.length() > maxLength ) ++ { ++ throw new OverflowPacketException( String.format( "Cannot send string longer than %s (got %s characters)", maxLength, s.length() ) ); ++ } ++ ++ byte[] b = s.getBytes( Charsets.UTF_8 ); ++ writeVarInt( b.length, buf ); ++ buf.writeBytes( b ); ++ } ++ ++ public static String readString(ByteBuf buf, final int maxLength) ++ { ++ int len = readVarInt( buf ); ++ if ( len > maxLength ) ++ { ++ throw new OverflowPacketException( String.format( "Cannot receive string longer than %s (got %s characters)", maxLength, len ) ); ++ } ++ ++ byte[] b = new byte[ len ]; ++ buf.readBytes( b ); ++ ++ return new String( b, Charsets.UTF_8 ); ++ } ++ // Waterfall end ++ + public static void writeArray(byte[] b, ByteBuf buf) + { + if ( b.length > Short.MAX_VALUE ) +diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Chat.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Chat.java +index 95ad39b7..ce131cb9 100644 +--- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/Chat.java ++++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/Chat.java +@@ -27,6 +27,11 @@ public class Chat extends DefinedPacket + @Override + public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) + { ++ // Waterfall start ++ if (direction == ProtocolConstants.Direction.TO_CLIENT) { ++ this.message = readString(buf, Short.MAX_VALUE * 8 + 8); ++ } else ++ // Waterfall end + message = readString( buf ); + if ( direction == ProtocolConstants.Direction.TO_CLIENT ) + { +@@ -37,6 +42,11 @@ public class Chat extends DefinedPacket + @Override + public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) + { ++ // Waterfall start ++ if (direction == ProtocolConstants.Direction.TO_CLIENT) { ++ writeString(this.message, Short.MAX_VALUE * 8 + 8, buf); ++ } else ++ // Waterfall end + writeString( message, buf ); + if ( direction == ProtocolConstants.Direction.TO_CLIENT ) + { +-- +2.21.0 +