Declaraciones públicas de src/safety.zig (zkit (SDK consumido)).
apps/docs/generated/zig/zkit.jsonPágina generada desde
zkit@zkit-0.0.0-_fk2iAa4BQCqGFKJeeY9WvMQClX5kiZQ2iOZrVsxVyyN (src/root.zig). No se edita a mano:bun run docs:genla regenera ybun run docs:checkfalla si difiere.
zkit.safety — capa de seguridad reutilizable para código Zig que procesa entrada no confiable con hilos propios (styx dec-0117, parte 1 Zig).
Cada pieza convierte una clase de bug en imposible o en fallo determinista:
| Pieza | Clase de bug |
|---|---|
Handle(Tag) / TypedSlab | use-after-free por handle obsoleto (generación) y confusión de handles (tipo por Tag) |
Budget / BudgetAllocator | memoria sin cota por sesión/usuario; leaks sin informe; contabilidad no independiente |
fs.Root | path traversal, symlinks que escapan, TOCTOU entre comprobar y abrir, FIFOs que bloquean |
BoundedReader / BitReader | lecturas fuera de límites, longitudes del wire sin validar, contadores que dimensionan reservas, códigos Exp-Golomb/uvlc con desplazamientos gigantes |
checked | desbordes aritméticos en offsets/longitudes (offset + len que da la vuelta) |
Mutex | unlock desde otro hilo, autodeadlock, inversión de orden de locks |
fuzz | parsers que hacen pánico o fugan con entradas truncadas/corruptas |
Lo que esta capa NO puede imponer (lo imponen los guards de build/CI del
consumidor, dec-0117 "doble capa"): que el código no se la salte — rutas
crudas, pthread directo, catch {} en parsers, unreachable sobre input.
safety.fsnamespace · línea 28
pub const fs = @import("safety/fs.zig")Sin ///.
safety.bounded_readernamespace · línea 31
pub const bounded_reader = @import("safety/bounded_reader.zig")Sin ///.
safety.checkednamespace · línea 32
pub const checked = @import("safety/checked.zig")Sin ///.
safety.mutexnamespace · línea 36
pub const mutex = @import("safety/mutex.zig")Sin ///.
safety.fuzznamespace · línea 38
pub const fuzz = @import("safety/fuzz.zig")Sin ///.