From e71c88f86034eceacfa532e2831389cfe6c3cc67 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Sat, 1 Oct 2022 05:14:41 -0300 Subject: [PATCH] Add sanity checks for some block nbt (#3129) --- .../packets/InventoryPackets.java | 8 ++++++-- .../providers/blockentities/BannerHandler.java | 9 +++++---- .../providers/blockentities/BedHandler.java | 2 +- .../providers/blockentities/SkullHandler.java | 9 +++++---- .../providers/blockentities/SpawnerHandler.java | 11 ++++++----- .../protocol1_18to1_17_1/packets/WorldPackets.java | 5 +++-- .../Protocol1_9_1_2To1_9_3_4.java | 6 +++++- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java index bb23e0d35..0bac452bd 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java @@ -309,8 +309,12 @@ public class InventoryPackets extends ItemRewriter { if (blockEntityTag.get("Patterns") instanceof ListTag) { for (Tag pattern : (ListTag) blockEntityTag.get("Patterns")) { if (pattern instanceof CompoundTag) { - IntTag c = ((CompoundTag) pattern).get("Color"); - c.setValue(15 - c.asInt()); // Invert color id + Tag c = ((CompoundTag) pattern).get("Color"); + if (c instanceof NumberTag) { + // Invert color id + ((CompoundTag) pattern).put("Color", + new IntTag(15 - ((NumberTag) c).asInt())); + } } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BannerHandler.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BannerHandler.java index 7b6cd272b..e5b32a54a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BannerHandler.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BannerHandler.java @@ -51,8 +51,8 @@ public class BannerHandler implements BlockEntityProvider.BlockEntityHandler { Tag base = tag.get("Base"); int color = 0; - if (base != null) { - color = ((NumberTag) tag.get("Base")).asInt(); + if (base instanceof NumberTag) { + color = ((NumberTag) base).asInt(); } // Standing banner if (blockId >= BANNER_START && blockId <= BANNER_STOP) { @@ -64,8 +64,9 @@ public class BannerHandler implements BlockEntityProvider.BlockEntityHandler { Via.getPlatform().getLogger().warning("Why does this block have the banner block entity? :(" + tag); } - if (tag.get("Patterns") instanceof ListTag) { - for (Tag pattern : (ListTag) tag.get("Patterns")) { + Tag patterns = tag.get("Patterns"); + if (patterns instanceof ListTag) { + for (Tag pattern : (ListTag) patterns) { if (pattern instanceof CompoundTag) { Tag c = ((CompoundTag) pattern).get("Color"); if (c instanceof IntTag) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BedHandler.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BedHandler.java index f6ee181d1..cb74ebddc 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BedHandler.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/BedHandler.java @@ -42,7 +42,7 @@ public class BedHandler implements BlockEntityProvider.BlockEntityHandler { int blockId = storage.get(position).getOriginal() - 972 + 748; Tag color = tag.get("color"); - if (color != null) { + if (color instanceof NumberTag) { blockId += (((NumberTag) color).asInt() * 16); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SkullHandler.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SkullHandler.java index 74feda5fa..cdf1a47a9 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SkullHandler.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SkullHandler.java @@ -43,11 +43,12 @@ public class SkullHandler implements BlockEntityProvider.BlockEntityHandler { int id = storage.get(position).getOriginal(); if (id >= SKULL_WALL_START && id <= SKULL_END) { Tag skullType = tag.get("SkullType"); - if (skullType != null) { - id += ((NumberTag) tag.get("SkullType")).asInt() * 20; + if (skullType instanceof NumberTag) { + id += ((NumberTag) skullType).asInt() * 20; } - if (tag.contains("Rot")) { - id += ((NumberTag) tag.get("Rot")).asInt(); + Tag rot = tag.get("Rot"); + if (rot instanceof NumberTag) { + id += ((NumberTag) rot).asInt(); } } else { Via.getPlatform().getLogger().warning("Why does this block have the skull block entity? " + tag); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SpawnerHandler.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SpawnerHandler.java index dcb3dbf14..2df1d986f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SpawnerHandler.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/providers/blockentities/SpawnerHandler.java @@ -19,6 +19,7 @@ package com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.block import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.EntityNameRewriter; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider; @@ -26,11 +27,11 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.BlockE public class SpawnerHandler implements BlockEntityProvider.BlockEntityHandler { @Override public int transform(UserConnection user, CompoundTag tag) { - if (tag.contains("SpawnData") && tag.get("SpawnData") instanceof CompoundTag) { - CompoundTag data = tag.get("SpawnData"); - if (data.contains("id") && data.get("id") instanceof StringTag) { - StringTag s = data.get("id"); - s.setValue(EntityNameRewriter.rewrite(s.getValue())); + Tag data = tag.get("SpawnData"); + if (data instanceof CompoundTag) { + Tag id = ((CompoundTag) data).get("id"); + if (id instanceof StringTag) { + ((StringTag) id).setValue(EntityNameRewriter.rewrite(((StringTag) id).getValue())); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/WorldPackets.java index 4d7d310bc..0e1779ee2 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/packets/WorldPackets.java @@ -20,6 +20,7 @@ package com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.NumberTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; @@ -212,8 +213,8 @@ public final class WorldPackets { private static void handleSpawners(int typeId, final CompoundTag tag) { if (typeId == 8) { - final CompoundTag entity = tag.get("SpawnData"); - if (entity != null) { + final Tag entity = tag.get("SpawnData"); + if (entity instanceof CompoundTag) { final CompoundTag spawnData = new CompoundTag(); tag.put("SpawnData", spawnData); spawnData.put("entity", entity); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9_1_2to1_9_3_4/Protocol1_9_1_2To1_9_3_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9_1_2to1_9_3_4/Protocol1_9_1_2To1_9_3_4.java index 6f4963f6a..63aa84b3d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9_1_2to1_9_3_4/Protocol1_9_1_2To1_9_3_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9_1_2to1_9_3_4/Protocol1_9_1_2To1_9_3_4.java @@ -18,6 +18,8 @@ package com.viaversion.viaversion.protocols.protocol1_9_1_2to1_9_3_4; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; @@ -63,7 +65,9 @@ public class Protocol1_9_1_2To1_9_3_4 extends AbstractProtocol