Hola! Encontré un caso donde los índices inválidos pueden pasar piola por el intérprete.
En numeric_idx, cuando el índice es Valor::Numero(n), se hace el cast directo con *n as i64. Eso hace que valores como 1.9 se trunquen a 1, y valores especiales como NaN/infinito también terminen convertidos antes de validar.
Ejemplo conceptual: indexar una lista con 1.9 debería dar error, pero puede terminar leyendo el elemento 1.
Creo que convendría validar antes del cast:
- que el número sea finito
- que sea entero exacto
- que esté dentro del rango convertible
Después de eso recién pasar a i64 y hacer la validación de límites normal.
Referencia: crates/wn/src/interpreter/mod.rs.
Hola! Encontré un caso donde los índices inválidos pueden pasar piola por el intérprete.
En
numeric_idx, cuando el índice esValor::Numero(n), se hace el cast directo con*n as i64. Eso hace que valores como1.9se trunquen a1, y valores especiales comoNaN/infinito también terminen convertidos antes de validar.Ejemplo conceptual: indexar una lista con
1.9debería dar error, pero puede terminar leyendo el elemento1.Creo que convendría validar antes del cast:
Después de eso recién pasar a
i64y hacer la validación de límites normal.Referencia:
crates/wn/src/interpreter/mod.rs.