diff --git a/src/network/mcpe/convert/LegacySkinAdapter.php b/src/network/mcpe/convert/LegacySkinAdapter.php index 74f74a0ee..2011e4cde 100644 --- a/src/network/mcpe/convert/LegacySkinAdapter.php +++ b/src/network/mcpe/convert/LegacySkinAdapter.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\convert; +use pocketmine\entity\InvalidSkinException; use pocketmine\entity\Skin; use pocketmine\network\mcpe\protocol\types\SkinData; @@ -58,12 +59,11 @@ class LegacySkinAdapter implements SkinAdapter{ $capeData = $data->isPersonaCapeOnClassic() ? "" : $data->getCapeImage()->getData(); - $geometryName = ""; $resourcePatch = json_decode($data->getResourcePatch(), true); if(isset($resourcePatch["geometry"]["default"]) && is_string($resourcePatch["geometry"]["default"])){ $geometryName = $resourcePatch["geometry"]["default"]; }else{ - //TODO: Kick for invalid skin + throw new InvalidSkinException("Missing geometry name field"); } return new Skin($data->getSkinId(), $data->getSkinImage()->getData(), $capeData, $geometryName, $data->getGeometryData()); diff --git a/src/network/mcpe/convert/SkinAdapter.php b/src/network/mcpe/convert/SkinAdapter.php index 54ae833ea..b77b846e2 100644 --- a/src/network/mcpe/convert/SkinAdapter.php +++ b/src/network/mcpe/convert/SkinAdapter.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\convert; +use pocketmine\entity\InvalidSkinException; use pocketmine\entity\Skin; use pocketmine\network\mcpe\protocol\types\SkinData; @@ -38,6 +39,7 @@ interface SkinAdapter{ /** * Allows you to convert skin data to a skin entity. + * @throws InvalidSkinException */ public function fromSkinData(SkinData $data) : Skin; } diff --git a/src/network/mcpe/handler/LoginPacketHandler.php b/src/network/mcpe/handler/LoginPacketHandler.php index 99dfd0c21..870bbc4d8 100644 --- a/src/network/mcpe/handler/LoginPacketHandler.php +++ b/src/network/mcpe/handler/LoginPacketHandler.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\handler; use Mdanter\Ecc\Crypto\Key\PublicKeyInterface; +use pocketmine\entity\InvalidSkinException; use pocketmine\event\player\PlayerPreLoginEvent; use pocketmine\network\BadPacketException; use pocketmine\network\mcpe\auth\ProcessLoginTask; @@ -112,7 +113,7 @@ class LoginPacketHandler extends PacketHandler{ $clientData = $this->parseClientData($packet->clientDataJwt); try{ $skin = SkinAdapterSingleton::get()->fromSkinData(ClientDataToSkinDataHelper::getInstance()->fromClientData($clientData)); - }catch(\InvalidArgumentException $e){ + }catch(\InvalidArgumentException | InvalidSkinException $e){ $this->session->getLogger()->debug("Invalid skin: " . $e->getMessage()); $this->session->disconnect("disconnectionScreen.invalidSkin");