2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Wed, 27 Feb 2019 22:18:40 -0500
|
|
|
|
Subject: [PATCH] Limit Client Sign length more
|
|
|
|
|
|
|
|
modified clients can send more data from the client
|
|
|
|
to the server and it would get stored on the sign as sent.
|
|
|
|
|
|
|
|
Mojang has a limit of 384 which is much higher than reasonable.
|
|
|
|
|
|
|
|
the client can barely render around 16 characters as-is, but formatting
|
|
|
|
codes can get it to be more than 16 actual length.
|
|
|
|
|
|
|
|
Set a limit of 80 which should give an average of 16 characters 2
|
|
|
|
sets of legacy formatting codes which should be plenty for all uses.
|
|
|
|
|
|
|
|
This does not strip any existing data from the NBT as plugins
|
|
|
|
may use this for storing data out of the rendered area.
|
|
|
|
|
|
|
|
it only impacts data sent from the client.
|
|
|
|
|
|
|
|
Set -DPaper.maxSignLength=XX to change limit or -1 to disable
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2024-02-22 17:23:15 +01:00
|
|
|
index 7fc5078b0fff8746daf6d3ee873e4d85df702cf1..f78f5be4a1d3e551649090b296881d8dafea1ab9 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
2024-02-01 10:15:57 +01:00
|
|
|
@@ -290,6 +290,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
2023-12-05 23:21:44 +01:00
|
|
|
private final MessageSignatureCache messageSignatureCache = MessageSignatureCache.createDefault();
|
2022-07-27 21:49:24 +02:00
|
|
|
private final FutureChain chatMessageChain;
|
2023-09-22 04:17:21 +02:00
|
|
|
private boolean waitingForSwitchToConfig;
|
2024-01-21 13:56:22 +01:00
|
|
|
+ private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); // Paper - Limit client sign length
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2023-09-22 04:17:21 +02:00
|
|
|
public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie clientData) {
|
|
|
|
super(server, connection, clientData, player); // CraftBukkit
|
2024-02-22 17:23:15 +01:00
|
|
|
@@ -3059,7 +3060,19 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2022-06-08 03:31:24 +02:00
|
|
|
@Override
|
|
|
|
public void handleSignUpdate(ServerboundSignUpdatePacket packet) {
|
|
|
|
- List<String> list = (List) Stream.of(packet.getLines()).map(ChatFormatting::stripFormatting).collect(Collectors.toList());
|
2024-01-21 13:56:22 +01:00
|
|
|
+ // Paper start - Limit client sign length
|
2022-06-08 03:31:24 +02:00
|
|
|
+ String[] lines = packet.getLines();
|
|
|
|
+ for (int i = 0; i < lines.length; ++i) {
|
|
|
|
+ if (MAX_SIGN_LINE_LENGTH > 0 && lines[i].length() > MAX_SIGN_LINE_LENGTH) {
|
|
|
|
+ // This handles multibyte characters as 1
|
|
|
|
+ int offset = lines[i].codePoints().limit(MAX_SIGN_LINE_LENGTH).map(Character::charCount).sum();
|
|
|
|
+ if (offset < lines[i].length()) {
|
|
|
|
+ lines[i] = lines[i].substring(0, offset); // this will break any filtering, but filtering is NYI as of 1.17
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
2022-06-08 03:31:24 +02:00
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<String> list = (List) Stream.of(lines).map(ChatFormatting::stripFormatting).collect(Collectors.toList());
|
2024-01-21 13:56:22 +01:00
|
|
|
+ // Paper end - Limit client sign length
|
2021-11-17 06:00:14 +01:00
|
|
|
|
2022-07-27 21:49:24 +02:00
|
|
|
this.filterTextPacket(list).thenAcceptAsync((list1) -> {
|
2022-06-08 03:31:24 +02:00
|
|
|
this.updateSignText(packet, list1);
|