SPIGOT-4074: Fix createBlockData succeeding on garbage

This commit is contained in:
md_5 2018-07-20 10:20:15 +10:00
parent c1d9f94223
commit 49ac8a7446
2 changed files with 11 additions and 1 deletions

View File

@ -403,7 +403,10 @@ public class CraftBlockData implements BlockData {
data = Block.REGISTRY.b(block) + data;
}
ArgumentBlock arg = new ArgumentBlock(new StringReader(data), false).a(false);
StringReader reader = new StringReader(data);
ArgumentBlock arg = new ArgumentBlock(reader, false).a(false);
Preconditions.checkArgument(!reader.canRead(), "Spurious trailing data");
blockData = arg.b();
} catch (CommandSyntaxException ex) {
throw new IllegalArgumentException("Could not parse data: " + data, ex);

View File

@ -44,6 +44,13 @@ public class BlockDataTest extends AbstractTestingBase {
CraftBlockData.newData(Material.CAKE, "minecraft:cake[bites=3]");
}
@Test(expected = IllegalArgumentException.class)
public void testMistake() {
BlockData cakeTest = CraftBlockData.fromData(Blocks.CAKE.getBlockData().set(BlockCake.BITES, 3));
CraftBlockData.newData(Material.CAKE, cakeTest.toString());
}
@Test
public void testClone() {
Cake cakeTest = (Cake) CraftBlockData.fromData(Blocks.CAKE.getBlockData().set(BlockCake.BITES, 3));