Saltar al contenido

Una reserva menor de lo necesario

RUSTSEC-2021-0003 documenta un fallo de la operación insert_many de la biblioteca SmallVec, un array dinámico de Rust: una estimación inferior del iterador se trató como espacio suficiente. Si llegaban más elementos, la escritura podía superar la reserva.

La corrección aseguró capacidad para cada inserción. El caso muestra que una estimación no sustituye la comprobación del invariante de almacenamiento.

Aplica esa misma idea a una función parecida, que copia datos de un iterador a un vector.

Una función copia en un vector los elementos de un iterador, y reserva espacio según la estimación mínima que da el iterador (3). El iterador entrega 5. ¿Qué diseño evita escribir fuera de la reserva?