/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/RateLimiter/Storage/InMemoryStorage.php
61 строка
2 KB
Jack Worman
Unsafe unserialize phpstan rule
08 июн 2026, 10:06
08 июн 2026, 10:06
fcdc45d
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\RateLimiter\Storage; use Symfony\Component\RateLimiter\LimiterStateInterface; /** * @author Wouter de Jong <wouter@wouterj.nl> */ class InMemoryStorage implements StorageInterface { private array $buckets = []; public function save(LimiterStateInterface $limiterState): void { $this->buckets[$limiterState->getId()] = [$this->getExpireAt($limiterState), serialize($limiterState)]; } public function fetch(string $limiterStateId): ?LimiterStateInterface { if (!isset($this->buckets[$limiterStateId])) { return null; } [$expireAt, $limiterState] = $this->buckets[$limiterStateId]; if (null !== $expireAt && $expireAt <= microtime(true)) { unset($this->buckets[$limiterStateId]); return null; } return unserialize($limiterState, ['allowed_classes' => true]); } public function delete(string $limiterStateId): void { if (!isset($this->buckets[$limiterStateId])) { return; } unset($this->buckets[$limiterStateId]); } private function getExpireAt(LimiterStateInterface $limiterState): ?float { if (null !== $expireSeconds = $limiterState->getExpirationTime()) { return microtime(true) + $expireSeconds; } return $this->buckets[$limiterState->getId()][0] ?? null; } }