# Différences avec Lua standard

LuaSandbox fournit un environnement sécurisé qui diffère de certaines manières de Lua 5.1 standard.

### Fonctionnalités non disponibles

- Les packages `dofile()`, `loadfile()`, et `io`, car ils permettent un accès direct au système de fichiers. Si nécessaire, l'accès au système de fichiers doit être effectué via des fonctions de rappel PHP.
- Le package `package`, y compris `require()` et `module()`, car il dépend fortement de l'accès direct au système de fichiers. Une réécriture pure Lua telle que celle utilisée dans l'extension MediaWiki Scribunto peut être utilisée à la place.
- `load()` et `loadstring()`, pour permettre l'analyse statique du code Lua.
- `print()`, depuis qu'il écrit sur la sortie standard. Si nécessaire, la sortie doit être effectuée via des fonctions de rappel PHP.
- La plupart du package `os`, car il permet la manipulation du processus et l'exécution d'autres processus.
  - `os.clock()`, `os.date()`, `os.difftime()`, et `os.time()` restent disponibles.
- La plupart du package `debug`, car il permet la manipulation de l'état Lua et des métadonnées de manière à pouvoir casser l'isolation.
  - `debug.traceback()` reste disponible.
- `string.dump()`, car il peut exposer des données internes.
- Le package `collectgarbage()`, `gcinfo()`, et `coroutine` n'ont pas été examinés pour la sécurité.

### Fonctionnalités qui ont été modifiées

- `pcall()` et `xpcall()` ne peuvent pas attraper certaines erreurs, en particulier les erreurs de délai d'attente.
- `tostring()` n'inclut pas les adresses de pointeur.
- `string.match()` a été patché pour limiter la profondeur de récursion et pour vérifier périodiquement un délai d'attente.
- `math.random()` et `math.randomseed()` sont remplacés par des versions qui ne partagent pas l'état avec `rand()` de PHP.
- Les méta méthodes de Lua 5.2 `__pairs` et `__ipairs` sont supportées par `pairs()` et `ipairs()`.

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