From da0c3c6f144c67985d8926783f261b476fe46581 Mon Sep 17 00:00:00 2001 From: adman Date: Sun, 3 May 2026 16:28:37 +0200 Subject: [PATCH] add bounds checking for ChunkAt and add TimeAt function to ChunkHeader --- level/anvil/mca.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/level/anvil/mca.go b/level/anvil/mca.go index c2515e1..2d63860 100644 --- a/level/anvil/mca.go +++ b/level/anvil/mca.go @@ -63,6 +63,10 @@ func ReadChunkHeader(r *os.File) (ch *ChunkHeader, err error) { } func (c *ChunkHeader) ChunkAt(f *os.File, x, z int32) (n *nbt.Tag, err error) { + if x < 0 || z < 0 || x >= ChunksWidthRegionFile || z >= ChunksWidthRegionFile { + err = fmt.Errorf("chunk out of bounds") + return + } off, size := chunkLocation(c.Chunk[chunkXZtoIndex(x, z)]) _, err = f.Seek(int64(off), 0) if err != nil { @@ -94,6 +98,15 @@ func (c *ChunkHeader) ChunkAt(f *os.File, x, z int32) (n *nbt.Tag, err error) { return } +func (c *ChunkHeader) TimeAt(f *os.File, x, z int32) (t int32, err error) { + if x < 0 || z < 0 || x >= ChunksWidthRegionFile || z >= ChunksWidthRegionFile { + err = fmt.Errorf("chunk out of bounds") + return + } + t = c.Time[chunkXZtoIndex(x, z)] + return +} + func chunkXZtoIndex(x, z int32) int32 { return (x % ChunksWidthRegionFile) + (z%ChunksWidthRegionFile)*ChunksWidthRegionFile }