From 1dd7ab92034016fa03bfecc3405e23c47ad29eed Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Sat, 14 Dec 2024 17:35:55 -0500 Subject: [PATCH] net/minecraft/nbt --- .../net/minecraft/nbt/ByteArrayTag.java.patch | 15 +++++++ .../net/minecraft/nbt/CompoundTag.java.patch | 12 +++--- .../net/minecraft/nbt/IntArrayTag.java.patch | 16 ++++---- .../net/minecraft/nbt/NbtIo.java.patch | 14 +++---- .../net/minecraft/nbt/NbtUtils.java.patch | 12 +++--- .../net/minecraft/nbt/TagParser.java.patch | 39 ++++++------------- .../net/minecraft/nbt/ByteArrayTag.java.patch | 15 ------- 7 files changed, 54 insertions(+), 69 deletions(-) create mode 100644 paper-server/patches/sources/net/minecraft/nbt/ByteArrayTag.java.patch rename paper-server/patches/{unapplied => sources}/net/minecraft/nbt/CompoundTag.java.patch (95%) rename paper-server/patches/{unapplied => sources}/net/minecraft/nbt/IntArrayTag.java.patch (51%) rename paper-server/patches/{unapplied => sources}/net/minecraft/nbt/NbtIo.java.patch (62%) rename paper-server/patches/{unapplied => sources}/net/minecraft/nbt/NbtUtils.java.patch (65%) rename paper-server/patches/{unapplied => sources}/net/minecraft/nbt/TagParser.java.patch (57%) delete mode 100644 paper-server/patches/unapplied/net/minecraft/nbt/ByteArrayTag.java.patch diff --git a/paper-server/patches/sources/net/minecraft/nbt/ByteArrayTag.java.patch b/paper-server/patches/sources/net/minecraft/nbt/ByteArrayTag.java.patch new file mode 100644 index 0000000000..6fd3bac562 --- /dev/null +++ b/paper-server/patches/sources/net/minecraft/nbt/ByteArrayTag.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/nbt/ByteArrayTag.java ++++ b/net/minecraft/nbt/ByteArrayTag.java +@@ -1,3 +_,4 @@ ++// mc-dev import + package net.minecraft.nbt; + + import java.io.DataInput; +@@ -23,6 +_,7 @@ + private static byte[] readAccounted(DataInput input, NbtAccounter accounter) throws IOException { + accounter.accountBytes(24L); + int _int = input.readInt(); ++ com.google.common.base.Preconditions.checkArgument( _int < 1 << 24); // Spigot + accounter.accountBytes(1L, _int); + byte[] bytes = new byte[_int]; + input.readFully(bytes); diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/CompoundTag.java.patch b/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch similarity index 95% rename from paper-server/patches/unapplied/net/minecraft/nbt/CompoundTag.java.patch rename to paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch index 1cb8cb2d7b..837aed26f3 100644 --- a/paper-server/patches/unapplied/net/minecraft/nbt/CompoundTag.java.patch +++ b/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/nbt/CompoundTag.java +++ b/net/minecraft/nbt/CompoundTag.java -@@ -49,7 +49,7 @@ +@@ -49,7 +_,7 @@ - private static CompoundTag loadCompound(DataInput input, NbtAccounter tracker) throws IOException { - tracker.accountBytes(48L); + private static CompoundTag loadCompound(DataInput input, NbtAccounter nbtAccounter) throws IOException { + nbtAccounter.accountBytes(48L); - Map map = Maps.newHashMap(); + it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // Paper - Reduce memory footprint of CompoundTag byte b; while ((b = input.readByte()) != 0) { -@@ -166,7 +166,7 @@ +@@ -166,7 +_,7 @@ } public CompoundTag() { @@ -18,7 +18,7 @@ } @Override -@@ -232,14 +232,34 @@ +@@ -232,14 +_,34 @@ } public void putUUID(String key, UUID value) { @@ -53,7 +53,7 @@ Tag tag = this.get(key); return tag != null && tag.getType() == IntArrayTag.TYPE && ((IntArrayTag)tag).getAsIntArray().length == 4; } -@@ -477,8 +497,16 @@ +@@ -477,8 +_,16 @@ @Override public CompoundTag copy() { diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/IntArrayTag.java.patch b/paper-server/patches/sources/net/minecraft/nbt/IntArrayTag.java.patch similarity index 51% rename from paper-server/patches/unapplied/net/minecraft/nbt/IntArrayTag.java.patch rename to paper-server/patches/sources/net/minecraft/nbt/IntArrayTag.java.patch index 97872e3339..16917267c6 100644 --- a/paper-server/patches/unapplied/net/minecraft/nbt/IntArrayTag.java.patch +++ b/paper-server/patches/sources/net/minecraft/nbt/IntArrayTag.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/nbt/IntArrayTag.java +++ b/net/minecraft/nbt/IntArrayTag.java -@@ -1,3 +1,4 @@ +@@ -1,3 +_,4 @@ +// mc-dev import package net.minecraft.nbt; import java.io.DataInput; -@@ -24,6 +25,7 @@ - private static int[] readAccounted(DataInput input, NbtAccounter tracker) throws IOException { - tracker.accountBytes(24L); - int i = input.readInt(); -+ com.google.common.base.Preconditions.checkArgument( i < 1 << 24); // Spigot +@@ -23,6 +_,7 @@ + private static int[] readAccounted(DataInput input, NbtAccounter accounter) throws IOException { + accounter.accountBytes(24L); + int _int = input.readInt(); ++ com.google.common.base.Preconditions.checkArgument( _int < 1 << 24); // Spigot + accounter.accountBytes(4L, _int); + int[] ints = new int[_int]; - tracker.accountBytes(4L, (long) i); - int[] aint = new int[i]; diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/NbtIo.java.patch b/paper-server/patches/sources/net/minecraft/nbt/NbtIo.java.patch similarity index 62% rename from paper-server/patches/unapplied/net/minecraft/nbt/NbtIo.java.patch rename to paper-server/patches/sources/net/minecraft/nbt/NbtIo.java.patch index f6dc9e632c..752f9b8153 100644 --- a/paper-server/patches/unapplied/net/minecraft/nbt/NbtIo.java.patch +++ b/paper-server/patches/sources/net/minecraft/nbt/NbtIo.java.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/nbt/NbtIo.java +++ b/net/minecraft/nbt/NbtIo.java -@@ -1,3 +1,4 @@ +@@ -1,3 +_,4 @@ +// mc-dev import package net.minecraft.nbt; import java.io.BufferedOutputStream; -@@ -324,6 +325,12 @@ +@@ -118,6 +_,12 @@ } - public static CompoundTag read(DataInput input, NbtAccounter tracker) throws IOException { + public static CompoundTag read(DataInput input, NbtAccounter accounter) throws IOException { + // Spigot start + if ( input instanceof io.netty.buffer.ByteBufInputStream ) + { -+ input = new DataInputStream(new org.spigotmc.LimitStream((InputStream) input, tracker)); ++ input = new DataInputStream(new org.spigotmc.LimitStream((InputStream) input, accounter)); + } + // Spigot end - Tag nbtbase = NbtIo.readUnnamedTag(input, tracker); - - if (nbtbase instanceof CompoundTag) { + Tag unnamedTag = readUnnamedTag(input, accounter); + if (unnamedTag instanceof CompoundTag) { + return (CompoundTag)unnamedTag; diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/NbtUtils.java.patch b/paper-server/patches/sources/net/minecraft/nbt/NbtUtils.java.patch similarity index 65% rename from paper-server/patches/unapplied/net/minecraft/nbt/NbtUtils.java.patch rename to paper-server/patches/sources/net/minecraft/nbt/NbtUtils.java.patch index a126b25999..00ff16e9e8 100644 --- a/paper-server/patches/unapplied/net/minecraft/nbt/NbtUtils.java.patch +++ b/paper-server/patches/sources/net/minecraft/nbt/NbtUtils.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/nbt/NbtUtils.java +++ b/net/minecraft/nbt/NbtUtils.java -@@ -149,8 +149,10 @@ - if (!nbt.contains("Name", 8)) { +@@ -143,8 +_,10 @@ + if (!tag.contains("Name", 8)) { return Blocks.AIR.defaultBlockState(); } else { -- ResourceLocation resourceLocation = ResourceLocation.parse(nbt.getString("Name")); -- Optional> optional = blockLookup.get(ResourceKey.create(Registries.BLOCK, resourceLocation)); +- ResourceLocation resourceLocation = ResourceLocation.parse(tag.getString("Name")); +- Optional> optional = blockGetter.get(ResourceKey.create(Registries.BLOCK, resourceLocation)); + // Paper start - Validate resource location -+ ResourceLocation resourceLocation = ResourceLocation.tryParse(nbt.getString("Name")); -+ Optional> optional = resourceLocation != null ? blockLookup.get(ResourceKey.create(Registries.BLOCK, resourceLocation)) : Optional.empty(); ++ ResourceLocation resourceLocation = ResourceLocation.tryParse(tag.getString("Name")); ++ Optional> optional = resourceLocation != null ? blockGetter.get(ResourceKey.create(Registries.BLOCK, resourceLocation)) : Optional.empty(); + // Paper end - Validate resource location if (optional.isEmpty()) { return Blocks.AIR.defaultBlockState(); diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/TagParser.java.patch b/paper-server/patches/sources/net/minecraft/nbt/TagParser.java.patch similarity index 57% rename from paper-server/patches/unapplied/net/minecraft/nbt/TagParser.java.patch rename to paper-server/patches/sources/net/minecraft/nbt/TagParser.java.patch index dd6b67ed47..8d8938c690 100644 --- a/paper-server/patches/unapplied/net/minecraft/nbt/TagParser.java.patch +++ b/paper-server/patches/sources/net/minecraft/nbt/TagParser.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/nbt/TagParser.java +++ b/net/minecraft/nbt/TagParser.java -@@ -49,6 +49,7 @@ +@@ -49,6 +_,7 @@ }, CompoundTag::toString); public static final Codec LENIENT_CODEC = Codec.withAlternative(AS_CODEC, CompoundTag.CODEC); private final StringReader reader; + private int depth; // Paper - public static CompoundTag parseTag(String string) throws CommandSyntaxException { - return new TagParser(new StringReader(string)).readSingleStruct(); -@@ -159,6 +160,7 @@ + public static CompoundTag parseTag(String text) throws CommandSyntaxException { + return new TagParser(new StringReader(text)).readSingleStruct(); +@@ -159,6 +_,7 @@ public CompoundTag readStruct() throws CommandSyntaxException { this.expect('{'); @@ -16,7 +16,7 @@ CompoundTag compoundTag = new CompoundTag(); this.reader.skipWhitespace(); -@@ -182,6 +184,7 @@ +@@ -182,6 +_,7 @@ } this.expect('}'); @@ -24,7 +24,7 @@ return compoundTag; } -@@ -191,6 +194,7 @@ +@@ -191,6 +_,7 @@ if (!this.reader.canRead()) { throw ERROR_EXPECTED_VALUE.createWithContext(this.reader); } else { @@ -32,7 +32,7 @@ ListTag listTag = new ListTag(); TagType tagType = null; -@@ -216,6 +220,7 @@ +@@ -216,6 +_,7 @@ } this.expect(']'); @@ -40,30 +40,15 @@ return listTag; } } -@@ -253,11 +258,11 @@ - } - - if (typeReader == ByteTag.TYPE) { -- list.add((T)((NumericTag)tag).getAsByte()); -+ list.add((T)(Byte)((NumericTag)tag).getAsByte()); // Paper - decompile fix - } else if (typeReader == LongTag.TYPE) { -- list.add((T)((NumericTag)tag).getAsLong()); -+ list.add((T)(Long)((NumericTag)tag).getAsLong()); // Paper - decompile fix - } else { -- list.add((T)((NumericTag)tag).getAsInt()); -+ list.add((T)(Integer)((NumericTag)tag).getAsInt()); // Paper - decompile fix - } - - if (!this.hasElementSeparator()) { -@@ -288,4 +293,11 @@ +@@ -287,5 +_,11 @@ + private void expect(char expected) throws CommandSyntaxException { this.reader.skipWhitespace(); - this.reader.expect(c); - } -+ + this.reader.expect(expected); ++ } + private void increaseDepth() throws CommandSyntaxException { + this.depth++; + if (this.depth > 512) { + throw new io.papermc.paper.brigadier.TagParseCommandSyntaxException("NBT tag is too complex, depth > 512"); + } -+ } + } } diff --git a/paper-server/patches/unapplied/net/minecraft/nbt/ByteArrayTag.java.patch b/paper-server/patches/unapplied/net/minecraft/nbt/ByteArrayTag.java.patch deleted file mode 100644 index d7c707925b..0000000000 --- a/paper-server/patches/unapplied/net/minecraft/nbt/ByteArrayTag.java.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/net/minecraft/nbt/ByteArrayTag.java -+++ b/net/minecraft/nbt/ByteArrayTag.java -@@ -1,3 +1,4 @@ -+// mc-dev import - package net.minecraft.nbt; - - import java.io.DataInput; -@@ -24,6 +25,7 @@ - private static byte[] readAccounted(DataInput input, NbtAccounter tracker) throws IOException { - tracker.accountBytes(24L); - int i = input.readInt(); -+ com.google.common.base.Preconditions.checkArgument( i < 1 << 24); // Spigot - - tracker.accountBytes(1L, (long) i); - byte[] abyte = new byte[i];