From 81620441a45ba4b945e305c62454e651de475d2a Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 12 Dec 2019 20:27:40 +0000 Subject: [PATCH] CompoundTagMetadataProperty: fix unhandled exception when decoding --- .../types/entity/CompoundTagMetadataProperty.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php b/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php index 705779fd8..4c1c73841 100644 --- a/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php +++ b/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php @@ -23,8 +23,10 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\protocol\types\entity; +use pocketmine\nbt\NbtDataException; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\TreeRoot; +use pocketmine\network\BadPacketException; use pocketmine\network\mcpe\serializer\NetworkBinaryStream; use pocketmine\network\mcpe\serializer\NetworkNbtSerializer; @@ -54,11 +56,21 @@ final class CompoundTagMetadataProperty implements MetadataProperty{ return $other instanceof self and $other->value->equals($this->value); } + /** + * @param NetworkBinaryStream $in + * + * @return self + * @throws BadPacketException + */ public static function read(NetworkBinaryStream $in) : self{ $offset = $in->getOffset(); - $result = new self((new NetworkNbtSerializer())->read($in->getBuffer(), $offset, 512)->getTag()); + try{ + $tag = (new NetworkNbtSerializer())->read($in->getBuffer(), $offset, 512)->mustGetCompoundTag(); + }catch(NbtDataException $e){ + throw new BadPacketException($e->getMessage(), 0, $e); + } $in->setOffset($offset); - return $result; + return new self($tag); } public function write(NetworkBinaryStream $out) : void{