RegistryTrait: enforce name validation rules on everything, not just enums

fixes #4916
This commit is contained in:
Dylan K. Taylor 2022-03-22 15:41:17 +00:00
parent 2b8a54f8ff
commit b7e6854189
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
2 changed files with 8 additions and 3 deletions

View File

@ -70,9 +70,7 @@ trait EnumTrait{
* @throws \InvalidArgumentException
*/
private function __construct(string $enumName){
if(preg_match('/^(?!\d)[A-Za-z\d_]+$/u', $enumName, $matches) === 0){
throw new \InvalidArgumentException("Invalid enum member name \"$enumName\", should only contain letters, numbers and underscores, and must not start with a number");
}
self::verifyName($enumName);
$this->enumName = $enumName;
if(self::$nextId === null){
self::$nextId = Process::pid(); //this provides enough base entropy to prevent hardcoding

View File

@ -31,12 +31,19 @@ trait RegistryTrait{
/** @var object[] */
private static $members = null;
private static function verifyName(string $name) : void{
if(preg_match('/^(?!\d)[A-Za-z\d_]+$/u', $name) === 0){
throw new \InvalidArgumentException("Invalid member name \"$name\", should only contain letters, numbers and underscores, and must not start with a number");
}
}
/**
* Adds the given object to the registry.
*
* @throws \InvalidArgumentException
*/
private static function _registryRegister(string $name, object $member) : void{
self::verifyName($name);
$upperName = mb_strtoupper($name);
if(isset(self::$members[$upperName])){
throw new \InvalidArgumentException("\"$upperName\" is already reserved");