mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 09:56:06 +00:00
Clean up Skin error handling, close #2926
Skin->__construct() now does all the validation.
This commit is contained in:
@ -75,14 +75,16 @@ class LoginSessionHandler extends SessionHandler{
|
||||
return true;
|
||||
}
|
||||
|
||||
$skin = new Skin(
|
||||
$packet->clientData[LoginPacket::I_SKIN_ID],
|
||||
base64_decode($packet->clientData[LoginPacket::I_SKIN_DATA]),
|
||||
base64_decode($packet->clientData[LoginPacket::I_CAPE_DATA]),
|
||||
$packet->clientData[LoginPacket::I_GEOMETRY_NAME],
|
||||
base64_decode($packet->clientData[LoginPacket::I_GEOMETRY_DATA])
|
||||
);
|
||||
if(!$skin->isValid()){
|
||||
try{
|
||||
$skin = new Skin(
|
||||
$packet->clientData[LoginPacket::I_SKIN_ID],
|
||||
base64_decode($packet->clientData[LoginPacket::I_SKIN_DATA]),
|
||||
base64_decode($packet->clientData[LoginPacket::I_CAPE_DATA]),
|
||||
$packet->clientData[LoginPacket::I_GEOMETRY_NAME],
|
||||
base64_decode($packet->clientData[LoginPacket::I_GEOMETRY_DATA])
|
||||
);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
$this->session->getLogger()->debug("Invalid skin: " . $e->getMessage());
|
||||
$this->session->disconnect("disconnectionScreen.invalidSkin");
|
||||
|
||||
return true;
|
||||
|
@ -27,6 +27,7 @@ namespace pocketmine\network\mcpe\protocol;
|
||||
|
||||
|
||||
use pocketmine\entity\Skin;
|
||||
use pocketmine\network\BadPacketException;
|
||||
use pocketmine\network\mcpe\handler\SessionHandler;
|
||||
use pocketmine\network\mcpe\protocol\types\PlayerListEntry;
|
||||
use function count;
|
||||
@ -59,13 +60,17 @@ class PlayerListPacket extends DataPacket implements ClientboundPacket{
|
||||
$geometryName = $this->getString();
|
||||
$geometryData = $this->getString();
|
||||
|
||||
$entry->skin = new Skin(
|
||||
$skinId,
|
||||
$skinData,
|
||||
$capeData,
|
||||
$geometryName,
|
||||
$geometryData
|
||||
);
|
||||
try{
|
||||
$entry->skin = new Skin(
|
||||
$skinId,
|
||||
$skinData,
|
||||
$capeData,
|
||||
$geometryName,
|
||||
$geometryData
|
||||
);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new BadPacketException($e->getMessage(), 0, $e);
|
||||
}
|
||||
$entry->xboxUserId = $this->getString();
|
||||
$entry->platformChatId = $this->getString();
|
||||
}else{
|
||||
|
@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe\protocol;
|
||||
#include <rules/DataPacket.h>
|
||||
|
||||
use pocketmine\entity\Skin;
|
||||
use pocketmine\network\BadPacketException;
|
||||
use pocketmine\network\mcpe\handler\SessionHandler;
|
||||
use pocketmine\utils\UUID;
|
||||
|
||||
@ -54,7 +55,11 @@ class PlayerSkinPacket extends DataPacket implements ClientboundPacket, Serverbo
|
||||
$geometryModel = $this->getString();
|
||||
$geometryData = $this->getString();
|
||||
|
||||
$this->skin = new Skin($skinId, $skinData, $capeData, $geometryModel, $geometryData);
|
||||
try{
|
||||
$this->skin = new Skin($skinId, $skinData, $capeData, $geometryModel, $geometryData);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new BadPacketException($e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
$this->premiumSkin = $this->getBool();
|
||||
}
|
||||
|
Reference in New Issue
Block a user