PlayerCreationEvent: verify that the class actually exists and is instantiable

this ensures that crashdumps blame the plugin instead of the core on bad classes, such as in this case: https://crash.pmmp.io/view/5331225
This commit is contained in:
Dylan K. Taylor 2021-10-21 14:49:46 +01:00
parent 2971bf30a5
commit a4b65d6a3f
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -26,6 +26,7 @@ namespace pocketmine\event\player;
use pocketmine\event\Event;
use pocketmine\network\mcpe\NetworkSession;
use pocketmine\player\Player;
use pocketmine\utils\Utils;
use function is_a;
/**
@ -96,10 +97,7 @@ class PlayerCreationEvent extends Event{
* @phpstan-param class-string<Player> $class
*/
public function setPlayerClass($class) : void{
if(!is_a($class, $this->baseClass, true)){
throw new \RuntimeException("Class $class must extend " . $this->baseClass);
}
Utils::testValidInstance($class, $this->baseClass);
$this->playerClass = $class;
}
}