add bounds checking for ChunkAt and add TimeAt function to ChunkHeader

This commit is contained in:
adman
2026-05-03 16:28:37 +02:00
parent b01e482bc5
commit da0c3c6f14
+13
View File
@@ -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) { 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)]) off, size := chunkLocation(c.Chunk[chunkXZtoIndex(x, z)])
_, err = f.Seek(int64(off), 0) _, err = f.Seek(int64(off), 0)
if err != nil { if err != nil {
@@ -94,6 +98,15 @@ func (c *ChunkHeader) ChunkAt(f *os.File, x, z int32) (n *nbt.Tag, err error) {
return 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 { func chunkXZtoIndex(x, z int32) int32 {
return (x % ChunksWidthRegionFile) + (z%ChunksWidthRegionFile)*ChunksWidthRegionFile return (x % ChunksWidthRegionFile) + (z%ChunksWidthRegionFile)*ChunksWidthRegionFile
} }