# 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 rappels 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 fonction de rappels 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()` reste 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 disponibles.

- `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é.

### Features that have been modified

- `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()`.