Declaraciones públicas de src/safety/checked.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.checked — aritmética que falla con error en vez de desbordar.
En un parser de entrada no confiable (MoQT, H3, MP4, MKV, el codec de
conduit/spire) la aritmética sobre campos del wire es donde nacen los
desbordes: offset + len que da la vuelta y pasa un bounds check, count * size que se trunca y reserva poco. En ReleaseFast + desborda en
silencio; en ReleaseSafe es pánico — un DoS remoto. Aquí todo devuelve
error.Overflow o error.OutOfBounds, que el parser propaga como "input
inválido".
Reglas que este módulo hace cumplir por tipo:
cast falla si el valor no cabe.[offset, offset+len) ⊆ [0, total) sin
calcular nunca offset + len con desborde.safety.checked.Errorconst · línea 18
pub const Error = error{Overflow}Sin ///.
safety.checked.RangeErrorconst · línea 19
pub const RangeError = error{ Overflow, OutOfBounds }Sin ///.
safety.checked.addfn · línea 21
pub fn add(comptime T: type, a: T, b: T) Error!TSin ///.
safety.checked.subfn · línea 27
pub fn sub(comptime T: type, a: T, b: T) Error!TSin ///.
safety.checked.mulfn · línea 33
pub fn mul(comptime T: type, a: T, b: T) Error!TSin ///.
safety.checked.mulAddfn · línea 40
pub fn mulAdd(comptime T: type, a: T, b: T, c: T) Error!Ta * b + c sin desborde intermedio.
safety.checked.castfn · línea 45
pub fn cast(comptime T: type, v: anytype) Error!TConvierte v a T o falla si no cabe (nunca trunca, nunca cambia signo).
safety.checked.alignForwardfn · línea 50
pub fn alignForward(comptime T: type, x: T, alignment: T) Error!Tx redondeado hacia arriba al múltiplo de alignment (potencia de dos).
safety.checked.rangeEndfn · línea 56
pub fn rangeEnd(offset: u64, len: u64) Error!u64Fin exclusivo de [offset, offset+len) o error.Overflow.
safety.checked.checkRangefn · línea 61
pub fn checkRange(offset: u64, len: u64, total: u64) RangeError!voidValida [offset, offset+len) ⊆ [0, total).
safety.checked.subslicefn · línea 67
pub fn subslice(comptime T: type, buf: []T, offset: u64, len: u64) RangeError![]Tbuf[offset..][0..len] validado (o error.OutOfBounds).