aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches')
-rw-r--r--Spigot-Server-Patches/0399-Strip-private-area-unicode-characters-from-signs.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0399-Strip-private-area-unicode-characters-from-signs.patch b/Spigot-Server-Patches/0399-Strip-private-area-unicode-characters-from-signs.patch
new file mode 100644
index 0000000000..adb6be2265
--- /dev/null
+++ b/Spigot-Server-Patches/0399-Strip-private-area-unicode-characters-from-signs.patch
@@ -0,0 +1,93 @@
+From 74d15ab6f2245fde253e1718bc7269170716f2b7 Mon Sep 17 00:00:00 2001
+From: Zach Brown <[email protected]>
+Date: Tue, 23 Oct 2018 20:53:43 -0400
+Subject: [PATCH] Strip private area unicode characters from signs
+
+It is not immediately clear how these characters ended up on signs in
+previous versions. It is clear, however, that they now render as empty
+unicode boxes in 1.13, whereas previously they rendered as invisible
+characters.
+
+When these signs are loaded in versions after this commit, these
+characters from the private use area of the Unicode block will be
+stripped. The sign will then be marked to ensure this conversion only
+runs once.
+
+There is a flag -DPaper.keepInvalidUnicode=true that can be used if you
+do not want us to strip these characters from your signs, though I can
+think of no reason to use it.
+
+Fixes GH-1571
+
+diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
+index 20dc3f272..3c712fc93 100644
+--- a/src/main/java/net/minecraft/server/TileEntitySign.java
++++ b/src/main/java/net/minecraft/server/TileEntitySign.java
+@@ -11,6 +11,11 @@ public class TileEntitySign extends TileEntity implements ICommandListener {
+ private EntityHuman g;
+ private final String[] h = new String[4];
+
++ // Paper start - Strip invalid unicode from signs on load
++ private static final boolean keepInvalidUnicode = Boolean.getBoolean("Paper.keepInvalidUnicode"); // Allow people to keep their bad unicode if they really want it
++ private boolean privateUnicodeRemoved = false;
++ // Paper end
++
+ public TileEntitySign() {
+ super(TileEntityTypes.SIGN);
+ }
+@@ -30,6 +35,12 @@ public class TileEntitySign extends TileEntity implements ICommandListener {
+ }
+ // CraftBukkit end
+
++ // Paper start - Only remove private area unicode once
++ if (this.privateUnicodeRemoved) {
++ nbttagcompound.setBoolean("Paper.RemovedPrivateUnicode", true);
++ }
++ // Paper end
++
+ return nbttagcompound;
+ }
+
+@@ -37,6 +48,11 @@ public class TileEntitySign extends TileEntity implements ICommandListener {
+ this.isEditable = false;
+ super.load(nbttagcompound);
+
++ // Paper start - Keep track, only do it once per sign
++ this.privateUnicodeRemoved = nbttagcompound.getBoolean("Paper.RemovedPrivateUnicode");
++ boolean ranUnicodeRemoval = false;
++ // Paper end
++
+ // CraftBukkit start - Add an option to convert signs correctly
+ // This is done with a flag instead of all the time because
+ // we have no way to tell whether a sign is from 1.7.10 or 1.8
+@@ -49,6 +65,19 @@ public class TileEntitySign extends TileEntity implements ICommandListener {
+ s = "\"\"";
+ }
+
++ // Paper start - Strip private use area unicode from signs
++ if (s != null && !keepInvalidUnicode && !this.privateUnicodeRemoved) {
++ StringBuilder builder = new StringBuilder();
++ for (char character : s.toCharArray()) {
++ if (Character.UnicodeBlock.of(character) != Character.UnicodeBlock.PRIVATE_USE_AREA) {
++ builder.append(character);
++ }
++ }
++ s = builder.toString();
++ ranUnicodeRemoval = true;
++ }
++ // Paper end
++
+ try {
+ //IChatBaseComponent ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); // Paper - move down - the old format might throw a json error
+
+@@ -75,6 +104,7 @@ public class TileEntitySign extends TileEntity implements ICommandListener {
+ this.h[i] = null;
+ }
+
++ if (ranUnicodeRemoval) this.privateUnicodeRemoved = true; // Paper - Flag to write NBT
+ }
+
+ public void a(int i, IChatBaseComponent ichatbasecomponent) {
+--
+2.19.1
+