Waterfall/BungeeCord-Patches/0049-Use-proper-max-length-for-serverbound-chat-packet.patch
Shane Freeder 337ca7f887
Updated Upstream (BungeeCord)
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:
70038c91 Revert "#2714: Remove unnecessary throws in ServerConnector"
39ef20b2 #2716: Don't attempt to send kick packet during handshake phase
74a6aa32 #2714: Remove unnecessary throws in ServerConnector
c7984070 Misc dependency update
2019-12-05 11:53:03 +00:00

77 lines
2.9 KiB
Diff

From bc5cbc9ac8635443a70d6c4b98500135dcc3a847 Mon Sep 17 00:00:00 2001
From: kashike <kashike@vq.lc>
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 57155c3b..9951c1f9 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
@@ -37,6 +37,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 ffcd815c..0ded6739 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.24.0