Check chunk data index and no longer panic

This commit is contained in:
Tnze
2022-06-25 23:02:36 +08:00
parent 58ca83157b
commit 3cda841bed
2 changed files with 8 additions and 5 deletions

View File

@ -143,6 +143,9 @@ func ChunkFromSave(c *save.Chunk) (*Chunk, error) {
sections := make([]Section, secs)
for _, v := range c.Sections {
i := int32(v.Y) - c.YPos
if i < 0 || i >= int32(secs) {
return nil, fmt.Errorf("section Y value %d out of bounds", v.Y)
}
var err error
sections[i].BlockCount, sections[i].States, err = readStatesPalette(v.BlockStates.Palette, v.BlockStates.Data)
if err != nil {

View File

@ -13,11 +13,11 @@ import (
// Chunk is 16* chunk
type Chunk struct {
DataVersion int32
XPos int32 `nbt:"xPos"`
YPos int32 `nbt:"yPos"`
ZPos int32 `nbt:"zPos"`
BlockEntities nbt.RawMessage `nbt:"block_entities"`
Structures nbt.RawMessage `nbt:"structures"`
XPos int32 `nbt:"xPos"`
YPos int32 `nbt:"yPos"`
ZPos int32 `nbt:"zPos"`
BlockEntities []nbt.RawMessage `nbt:"block_entities"`
Structures nbt.RawMessage `nbt:"structures"`
Heightmaps struct {
MotionBlocking []uint64 `nbt:"MOTION_BLOCKING"`
MotionBlockingNoLeaves []uint64 `nbt:"MOTION_BLOCKING_NO_LEAVES"`