From c607d212d4f264ce6cb0da51caf175af0f0f092d Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Tue, 8 Mar 2011 23:18:14 +0000 Subject: [PATCH] (Probably) fixed the sign exploit --- .../minecraft/server/NetServerHandler.java | 13 ++++++ .../net/minecraft/server/TileEntitySign.java | 40 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/main/java/net/minecraft/server/TileEntitySign.java diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java index 8486188bc8..dc1621ff12 100644 --- a/src/main/java/net/minecraft/server/NetServerHandler.java +++ b/src/main/java/net/minecraft/server/NetServerHandler.java @@ -776,6 +776,17 @@ public class NetServerHandler extends NetHandler implements ICommandListener { // CraftBukkit start if (this.e.world.f(packet130updatesign.a, packet130updatesign.b, packet130updatesign.c)) { TileEntity tileentity = this.e.world.getTileEntity(packet130updatesign.a, packet130updatesign.b, packet130updatesign.c); + if (tileentity instanceof TileEntitySign) { + TileEntitySign sign = (TileEntitySign)tileentity; + if (!sign.fresh) { + int x = packet130updatesign.a; + int y = packet130updatesign.b; + int z = packet130updatesign.c; + server.getLogger().severe("Player " + getPlayer().getName() + "/" + getPlayer().getAddress().toString() + " just tried to change the sign text at " + + x + "," + y + "," + z + " - very likely an exploit attempt. Recommend ban."); + return; + } + } // CraftBukkit end int i; @@ -817,6 +828,8 @@ public class NetServerHandler extends NetHandler implements ICommandListener { for (int l = 0; l < 4; ++l) { event.setLine(l, ""); } + } else { + tileentitysign.fresh = false; } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java new file mode 100644 index 0000000000..d55f91e9e3 --- /dev/null +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +public class TileEntitySign extends TileEntity { + + public String[] a = new String[] { "", "", "", ""}; + public int b = -1; + public boolean fresh = true; // Craftbukkit + + public TileEntitySign() {} + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.a("Text1", this.a[0]); + nbttagcompound.a("Text2", this.a[1]); + nbttagcompound.a("Text3", this.a[2]); + nbttagcompound.a("Text4", this.a[3]); + } + + public void a(NBTTagCompound nbttagcompound) { + fresh = false; // Craftbukkit + super.a(nbttagcompound); + + for (int i = 0; i < 4; ++i) { + this.a[i] = nbttagcompound.i("Text" + (i + 1)); + if (this.a[i].length() > 15) { + this.a[i] = this.a[i].substring(0, 15); + } + } + } + + public Packet e() { + String[] astring = new String[4]; + + for (int i = 0; i < 4; ++i) { + astring[i] = this.a[i]; + } + + return new Packet130UpdateSign(this.e, this.f, this.g, astring); + } +}