diff --git a/src/Symfony/Component/Security/Core/Role/RoleHierarchy.php b/src/Symfony/Component/Security/Core/Role/RoleHierarchy.php index e625c0d6eb681..a0d2794dc3a0a 100644 --- a/src/Symfony/Component/Security/Core/Role/RoleHierarchy.php +++ b/src/Symfony/Component/Security/Core/Role/RoleHierarchy.php @@ -54,8 +54,11 @@ protected function buildRoleMap(): void $this->map[$main] = $roles; $visited = []; $additionalRoles = $roles; - while ($role = array_pop($additionalRoles)) { + while (null !== $role = key($additionalRoles)) { + $role = $additionalRoles[$role]; + if (!isset($this->hierarchy[$role])) { + next($additionalRoles); continue; } @@ -68,6 +71,8 @@ protected function buildRoleMap(): void foreach (array_diff($this->hierarchy[$role], $visited) as $additionalRole) { $additionalRoles[] = $additionalRole; } + + next($additionalRoles); } $this->map[$main] = array_unique($this->map[$main]);