From e6a58e269099a7942d157a214beacc6c30f5617d Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 8 Jan 2020 09:55:03 +0000 Subject: [PATCH] format/leveldb: fix crash on truncated level.dat file --- src/pocketmine/level/format/io/leveldb/LevelDB.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/level/format/io/leveldb/LevelDB.php b/src/pocketmine/level/format/io/leveldb/LevelDB.php index 30b8d7bdea..1a355062db 100644 --- a/src/pocketmine/level/format/io/leveldb/LevelDB.php +++ b/src/pocketmine/level/format/io/leveldb/LevelDB.php @@ -126,8 +126,12 @@ class LevelDB extends BaseLevelProvider{ } protected function loadLevelData() : void{ + $rawLevelData = file_get_contents($this->getPath() . "level.dat"); + if($rawLevelData === false or strlen($rawLevelData) <= 8){ + throw new LevelException("Truncated level.dat"); + } $nbt = new LittleEndianNBTStream(); - $levelData = $nbt->read(substr(file_get_contents($this->getPath() . "level.dat"), 8)); + $levelData = $nbt->read(substr($rawLevelData, 8)); if($levelData instanceof CompoundTag){ $this->levelData = $levelData; }else{