mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-01 08:20:51 +01:00
de04cbced5
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 Bukkit Changes: f29cb801 Separate checkstyle-suppressions file is not required 86f99bbe SPIGOT-7540, PR-946: Add ServerTickManager API d4119585 SPIGOT-6903, PR-945: Add BlockData#getMapColor b7a2ed41 SPIGOT-7530, PR-947: Add Player#removeResourcePack 9dd56255 SPIGOT-7527, PR-944: Add WindCharge#explode() 994a6163 Attempt upgrade of resolver libraries CraftBukkit Changes: b3b43a6ad Add Checkstyle check for unused imports 13fb3358e SPIGOT-7544: Scoreboard#getEntries() doesn't get entries but class names 3dda99c06 SPIGOT-7540, PR-1312: Add ServerTickManager API 2ab4508c0 SPIGOT-6903, PR-1311: Add BlockData#getMapColor 1dbdbbed4 PR-1238: Remove unnecessary sign ticking 659728d2a MC-264285, SPIGOT-7439, PR-1237: Fix unbreakable flint and steel is completely consumed while igniting creeper e37e29ce0 Increase outdated build delay c00438b39 SPIGOT-7530, PR-1313: Add Player#removeResourcePack 492dd80ce SPIGOT-7527, PR-1310: Add WindCharge#explode() e11fbb9d7 Upgrade MySQL driver 9f3a0bd2a Attempt upgrade of resolver libraries 60d16d7ca PR-1306: Centralize Bukkit and Minecraft entity conversion Spigot Changes: 06d602e7 Rebuild patches
57 lines
3.1 KiB
Diff
57 lines
3.1 KiB
Diff
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
|
|
index e4073e8287952e1528dd855c79987a1677f921dd..aca772397752b7f4c1b98c14c019f6fb9f71aba4 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -291,6 +291,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
private final MessageSignatureCache messageSignatureCache = MessageSignatureCache.createDefault();
|
|
private final FutureChain chatMessageChain;
|
|
private boolean waitingForSwitchToConfig;
|
|
+ private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); // Paper
|
|
|
|
public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie clientData) {
|
|
super(server, connection, clientData, player); // CraftBukkit
|
|
@@ -3060,7 +3061,19 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
|
|
@Override
|
|
public void handleSignUpdate(ServerboundSignUpdatePacket packet) {
|
|
- List<String> list = (List) Stream.of(packet.getLines()).map(ChatFormatting::stripFormatting).collect(Collectors.toList());
|
|
+ // Paper start - cap line length - modified clients can send longer data than normal
|
|
+ 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
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ List<String> list = (List) Stream.of(lines).map(ChatFormatting::stripFormatting).collect(Collectors.toList());
|
|
+ // Paper end
|
|
|
|
this.filterTextPacket(list).thenAcceptAsync((list1) -> {
|
|
this.updateSignText(packet, list1);
|