Skip to content

Feature Safety

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

🛡️ Безопасность и производительность

← Возможности · Главная · Сравнение

Код языка не попадает в путь без проверки

Dictionary::load() пропускает только строгий ISO-формат ^[a-z]{2,3}$ — path traversal исключён по построению, включая изощрённые обходы (a/../../data/ru с валидным хвостом). Негативные сценарии закреплены security-тестами.

Dictionary::load('../etc', WordClass::Noun);  // UnknownDictionaryException
Dictionary::load('RU', WordClass::Noun);      // UnknownDictionaryException

Данные — чистые return-массивы

Файлы data/*/*.php содержат только declare + return [...] — без вызовов функций и побочных эффектов (закреплено токен-анализом в тестах). Формат PHP выбран сознательно: данные попадают в opcache и загружаются без парсинга JSON/YAML на каждый процесс.

Ленивость на всех уровнях

  • словарь загружается при первом load() и кэшируется на процесс;
  • обратный индекс форм строится при первом find() по не-лемме;
  • плоский индекс formOf() — при первом вызове, с shared-ссылками на карты форм (память не дублируется).

Производительность

Все шесть бенч-сценариев — за словарём, включая победу над мемоизацией doctrine на нерегулярном множественном. Полные таблицы — в Сравнении; бюджеты производительности закреплены perf-тестами (100k formOf < 1 с с запасом на порядок).

Clone this wiki locally