Planetfall se lanzó ayer en público, pero he pasado semanas en Infidel. Encontré un error egregio: un puntero salvaje que rabulea sobre la memoria. La mayoría lo consideran trivial, pero como programador en C, veo la corrupción de memoria como el peor pecado.
También es un error del compilador. Infidel usa ENDLESS-DESERT para simular áreas sin mapear. Los objetos caídos van a DESERT-TABLE con lat/long.
El rutina DESERT-TO-TABLE tiene un error donde falla en manejar adecuadamente el argumento SLOC, causando corrupción de memoria. El error es difícil de detectar porque los objetos tienen una probabilidad de uno en tres de perderse en la arena. Analicé la versión 22 de Infidel serial 840522 (actualización de Macintosh); la versión original 830916 tiene el mismo error.
La rutina escribe en DESERT-TABLE usando un índice incorrecto, sobrescribiendo memoria adyacente. Esto viola la seguridad de memoria a pesar de tener impacto mínimo en el juego. La implementación de la máquina Z revela el error a través de errores de aritmética de punteros en el bucle de actualización de la tabla.
Fuente: Hacker News · Resumido por HeadlinesBriefing