From 11aaf88d5ba18d5105a88b9a3a664f792fef4ab0 Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 7 Apr 2026 23:42:37 +0100 Subject: [PATCH] Fix u10 lengths 1024 does not fit within a u10. The fix is to subtract 1 since 0 is not a valid length. --- .../packet/ClientboundChunkTimestampsResponsePacket.java | 5 ++++- .../mod/net/packet/ServerboundCatchupRequestPacket.java | 6 +++--- mapsync-server/src/packets.ts | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ClientboundChunkTimestampsResponsePacket.java b/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ClientboundChunkTimestampsResponsePacket.java index 6862e4c..75f7cea 100644 --- a/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ClientboundChunkTimestampsResponsePacket.java +++ b/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ClientboundChunkTimestampsResponsePacket.java @@ -4,10 +4,12 @@ import gjum.minecraft.mapsync.mod.net.Packet; import gjum.minecraft.mapsync.mod.net.buffers.BufferReader; import gjum.minecraft.mapsync.mod.utils.Assertions; +import gjum.minecraft.mapsync.mod.utils.MagicValues; import java.util.List; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; +import org.apache.commons.lang3.IntegerRange; import org.jetbrains.annotations.NotNull; /// The server will send this packet, containing an elaboration of chunk timestamps of a particular region as requested @@ -23,6 +25,7 @@ public record ClientboundChunkTimestampsResponsePacket( public ClientboundChunkTimestampsResponsePacket { chunks = Assertions.assertNonNullList(chunks); + Assertions.assertIntRange(IntegerRange.of(1, MagicValues.REGION_GRID), chunks.size()); } public static @NotNull ClientboundChunkTimestampsResponsePacket read( @@ -31,7 +34,7 @@ public record ClientboundChunkTimestampsResponsePacket( final ResourceKey dimension = reader.readResourceKey(Registries.DIMENSION); final int anchorChunkX = reader.readInt16() << 5; final int anchorChunkZ = reader.readInt16() << 5; - final var chunks = new CatchupChunk[reader.readUnt10()]; + final var chunks = new CatchupChunk[reader.readUnt10() + 1]; for (int i = 0; i < chunks.length; i++) { chunks[i] = new CatchupChunk( dimension, diff --git a/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ServerboundCatchupRequestPacket.java b/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ServerboundCatchupRequestPacket.java index e2c6e70..c0a8929 100644 --- a/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ServerboundCatchupRequestPacket.java +++ b/mapsync-mod/src/main/java/gjum/minecraft/mapsync/mod/net/packet/ServerboundCatchupRequestPacket.java @@ -7,7 +7,7 @@ import java.util.Map; import net.minecraft.resources.Identifier; import net.minecraft.world.level.ChunkPos; -import org.apache.commons.lang3.LongRange; +import org.apache.commons.lang3.IntegerRange; import org.jetbrains.annotations.NotNull; /// The client sends this in response to a [ClientboundChunkTimestampsResponsePacket], requesting the server to send @@ -27,7 +27,7 @@ public record ServerboundCatchupRequestPacket( public ServerboundCatchupRequestPacket { Assertions.assertNotNull(dimension); chunks = Assertions.assertNonNullMap(chunks); - Assertions.assertLongRange(LongRange.of(1, MagicValues.REGION_GRID), chunks.size()); + Assertions.assertIntRange(IntegerRange.of(1, MagicValues.REGION_GRID), chunks.size()); } @Override @@ -37,7 +37,7 @@ public void write( writer.writeString(this.dimension().toString()); writer.writeInt16(this.regionX()); writer.writeInt16(this.regionZ()); - writer.writeUnt10(this.chunks().size()); + writer.writeUnt10(this.chunks().size() - 1); for (final var entry : this.chunks().entrySet()) { final ChunkPos chunkPos = entry.getKey(); writer.writeUnt5(chunkPos.getRegionLocalX()); diff --git a/mapsync-server/src/packets.ts b/mapsync-server/src/packets.ts index c1c65cc..89a5b92 100644 --- a/mapsync-server/src/packets.ts +++ b/mapsync-server/src/packets.ts @@ -171,7 +171,7 @@ export class ClientboundChunkTimestampsResponsePacket extends Packet { writer.writeString(this.dimension); writer.writeInt16(this.regionX); writer.writeInt16(this.regionZ); - writer.writeUnt10(this.chunks.length); + writer.writeUnt10(this.chunks.length - 1); for (const row of this.chunks) { writer.writeUnt5(row.chunkX & 31n); writer.writeUnt5(row.chunkZ & 31n); @@ -196,7 +196,7 @@ export class ServerboundCatchupRequestPacket extends Packet { const dimension = reader.readString(); const anchorChunkX = reader.readInt16() << 5n; const anchorChunkZ = reader.readInt16() << 5n; - const chunks: CatchupChunk[] = new Array(Number(reader.readUnt10())); + const chunks: CatchupChunk[] = new Array(Number(reader.readUnt10()) + 1); for (let i = 0; i < chunks.length; i++) { chunks[i] = { chunkX: asInt32(anchorChunkX + reader.readUnt5()),