From 435a986068a80ebe58703d825c09bf17240c3be1 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Sun, 14 Aug 2022 22:24:31 +0200 Subject: [PATCH] Properly enclose limiting of nbt reading Fixes #3093 --- .../viaversion/api/type/types/minecraft/NBTType.java | 9 +++++---- gradle/libs.versions.toml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/NBTType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/NBTType.java index ecb5e2dd8..84c718201 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/NBTType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/NBTType.java @@ -24,7 +24,7 @@ package com.viaversion.viaversion.api.type.types.minecraft; import com.github.steveice10.opennbt.NBTIO; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.google.common.base.Preconditions; +import com.github.steveice10.opennbt.tag.limiter.TagLimiter; import com.viaversion.viaversion.api.type.Type; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufInputStream; @@ -35,21 +35,22 @@ import java.io.DataOutput; public class NBTType extends Type { + private static final int MAX_NBT_BYTES = 2097152; // 2mb + private static final int MAX_NESTING_LEVEL = 512; + public NBTType() { super(CompoundTag.class); } @Override public CompoundTag read(ByteBuf buffer) throws Exception { - Preconditions.checkArgument(buffer.readableBytes() <= 2097152, "Cannot read NBT (got %s bytes)", buffer.readableBytes()); - int readerIndex = buffer.readerIndex(); byte b = buffer.readByte(); if (b == 0) { return null; } else { buffer.readerIndex(readerIndex); - return NBTIO.readTag((DataInput) new ByteBufInputStream(buffer)); + return NBTIO.readTag((DataInput) new ByteBufInputStream(buffer), TagLimiter.create(MAX_NBT_BYTES, MAX_NESTING_LEVEL)); } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e9008872..799d80632 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ adventure = "4.9.3" gson = "2.8.8" fastutil = "8.5.6" flare = "2.0.0" -openNBT = "2.0" +openNBT = "2.1" javassist = "3.28.0-GA" # Common provided