From 44ef9fc5776804014104295eb3c852c9eab1a248 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 16 Jan 2019 21:00:28 +0000 Subject: [PATCH] LoginPacket: account for some missed error cases --- .../network/mcpe/protocol/LoginPacket.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pocketmine/network/mcpe/protocol/LoginPacket.php b/src/pocketmine/network/mcpe/protocol/LoginPacket.php index ea51cf32f..abdb2a55a 100644 --- a/src/pocketmine/network/mcpe/protocol/LoginPacket.php +++ b/src/pocketmine/network/mcpe/protocol/LoginPacket.php @@ -31,6 +31,7 @@ use pocketmine\entity\Skin; use pocketmine\network\BadPacketException; use pocketmine\network\mcpe\handler\SessionHandler; use pocketmine\PlayerInfo; +use pocketmine\utils\BinaryDataException; use pocketmine\utils\BinaryStream; use pocketmine\utils\Utils; use pocketmine\utils\UUID; @@ -117,7 +118,7 @@ class LoginPacket extends DataPacket{ /** * @throws BadPacketException - * @throws \UnexpectedValueException + * @throws BinaryDataException */ protected function decodeConnectionRequest() : void{ $buffer = new BinaryStream($this->getString()); @@ -136,7 +137,11 @@ class LoginPacket extends DataPacket{ $this->chainDataJwt = $chainData['chain']; foreach($this->chainDataJwt as $k => $chain){ //validate every chain element - $claims = Utils::getJwtClaims($chain); + try{ + $claims = Utils::getJwtClaims($chain); + }catch(\UnexpectedValueException $e){ + throw new BadPacketException($e->getMessage(), 0, $e); + } if(isset($claims["extraData"])){ if(!is_array($claims["extraData"])){ throw new BadPacketException("'extraData' key should be an array"); @@ -159,7 +164,11 @@ class LoginPacket extends DataPacket{ } $this->clientDataJwt = $buffer->get($buffer->getLInt()); - $clientData = Utils::getJwtClaims($this->clientDataJwt); + try{ + $clientData = Utils::getJwtClaims($this->clientDataJwt); + }catch(\UnexpectedValueException $e){ + throw new BadPacketException($e->getMessage(), 0, $e); + } $v = new Validator(); $v->required(self::I_CLIENT_RANDOM_ID)->integer();