# Отличия от стандартного Lua

LuaSandbox предоставляет изолированную среду, которая в некоторых отношениях отличается от стандартной Lua 5.1.

### Функции, которые недоступны

- `dofile()`, `loadfile()` и пакет `io`, поскольку они разрешают прямой доступ к файловой системе. При необходимости доступ к файловой системе должен осуществляться через callback-функции PHP.
- Пакет `package`, включая `require()` и `module()`, так как он сильно зависит от прямого доступа к файловой системе. Вместо него можно использовать перезапись на чистом Lua, такую как та, что используется в модуле MediaWiki Scribunto.
- `load()` и `loadstring()`, для статического анализа кода Lua.
- `print()`, поскольку функция выводит в стандартный вывод. При необходимости вывод должен выполняться через callback-функции PHP.
- Большая часть пакета `os`, поскольку он позволяет управлять процессом и выполнять другие процессы.
  - `os.clock()`, `os.date()`, `os.difftime()` и `os.time()` остаются доступными.
- Большая часть пакета `debug`, поскольку он позволяет манипулировать состоянием Lua и метаданными способами, которые могут нарушить песочницу.
  - `debug.traceback()` остаётся доступным.
- `string.dump()`, так как это может раскрыть внутренние данные.
- `collectgarbage()`, `gcinfo()` и пакет `coroutine` не были проверены на безопасность.

### Изменённые функции

- `pcall()` и `xpcall()` не может отловить определённые ошибки, особенно ошибки времени ожидания.
- `tostring()` не включает адреса указателей.
- `string.match()` была исправлена для ограничения глубины рекурсии и периодической проверки времени ожидания.
- `math.random()` и `math.randomseed()` заменяются версиями, которые не разделяют состояние с функцией PHP `rand()`.
- Метаметоды `__pairs` и `__ipairs` Lua 5.2 поддерживаются с помощью `pairs()` и `ipairs()`.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open