summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-03-08 23:18:14 +0000
committerDinnerbone <dinnerbone@dinnerbone.com>2011-03-08 23:18:14 +0000
commitc607d212d4f264ce6cb0da51caf175af0f0f092d (patch)
tree1bcee5f5fd16e2fb2c057016f5e0812fd0c2a30b /src/main
parentcdcb9475325e0aec73ffc0138ef7110231b9eec9 (diff)
downloadcraftbukkit-c607d212d4f264ce6cb0da51caf175af0f0f092d.tar
craftbukkit-c607d212d4f264ce6cb0da51caf175af0f0f092d.tar.gz
craftbukkit-c607d212d4f264ce6cb0da51caf175af0f0f092d.tar.lz
craftbukkit-c607d212d4f264ce6cb0da51caf175af0f0f092d.tar.xz
craftbukkit-c607d212d4f264ce6cb0da51caf175af0f0f092d.zip
(Probably) fixed the sign exploit
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/net/minecraft/server/NetServerHandler.java13
-rw-r--r--src/main/java/net/minecraft/server/TileEntitySign.java40
2 files changed, 53 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java
index 8486188b..dc1621ff 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 00000000..d55f91e9
--- /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);
+ }
+}