summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2016-07-13 11:47:57 +1000
committermd_5 <git@md-5.net>2016-07-13 11:47:57 +1000
commit301db84d3d85f5218f3ec590224071c04140bbe2 (patch)
tree2e789d9e8f91fe90eaa47d608ab28e70ffc58d8d
parentca1bb1c44509603ef94285c7c4729b79026ae4cb (diff)
downloadcraftbukkit-301db84d3d85f5218f3ec590224071c04140bbe2.tar
craftbukkit-301db84d3d85f5218f3ec590224071c04140bbe2.tar.gz
craftbukkit-301db84d3d85f5218f3ec590224071c04140bbe2.tar.lz
craftbukkit-301db84d3d85f5218f3ec590224071c04140bbe2.tar.xz
craftbukkit-301db84d3d85f5218f3ec590224071c04140bbe2.zip
SPIGOT-2520: Better skull validation
-rw-r--r--nms-patches/ItemSkull.patch17
1 files changed, 15 insertions, 2 deletions
diff --git a/nms-patches/ItemSkull.patch b/nms-patches/ItemSkull.patch
index 2845d0f9..81de4153 100644
--- a/nms-patches/ItemSkull.patch
+++ b/nms-patches/ItemSkull.patch
@@ -1,10 +1,23 @@
--- a/net/minecraft/server/ItemSkull.java
+++ b/net/minecraft/server/ItemSkull.java
-@@ -117,6 +117,7 @@
+@@ -117,6 +117,20 @@
nbttagcompound.set("SkullOwner", GameProfileSerializer.serialize(new NBTTagCompound(), gameprofile));
return true;
} else {
-+ nbttagcompound.remove("SkullOwner"); // CraftBukkit - remove broken skulls
++ // CraftBukkit start
++ boolean valid = true;
++
++ NBTTagList textures = nbttagcompound.getCompound("SkullOwner").getCompound("Properties").getList("textures", 10); // Safe due to method contracts
++ for (int i = 0; i < textures.size(); i++) {
++ if (textures.get(i) instanceof NBTTagCompound && !((NBTTagCompound) textures.get(i)).hasKeyOfType("Signature", 8)) {
++ valid = false;
++ }
++ }
++
++ if (!valid) {
++ nbttagcompound.remove("SkullOwner");
++ }
++ // CraftBukkit end
return false;
}
}