Planetfall a été publié hier, mais j'ai passé des semaines sur Infidel. J'ai trouvé un bug égregieux : un pointeur sauvage qui gribouille la mémoire. La plupart le considèrent comme trivial, mais en tant que programmeur C, je vois la corruption de mémoire comme le pire des péchés.
C'est aussi un bug de compilateur. Infidel utilise ENDLESS-DESERT pour simuler des zones non cartographiées. Les objets abandonnés vont à DESERT-TABLE avec lat/long.
La routine DESERT-TO-TABLE a un bug où elle échoue à correctement gérer l'argument SLOC, provoquant une corruption de mémoire. Ce bug est difficile à détecter car les objets ont une chance sur trois d'être perdus dans le sable. J'ai analysé la version 22 d'Infidel serial 840522 (mise à jour Macintosh) ; la version originale 830916 a le même bug.
La routine écrit sur DESERT-TABLE avec un index incorrect, écrasant la mémoire adjacente. Cela viole la sécurité de mémoire malgré un impact minimal sur le jeu. L'implémentation de la machine Z expose l'erreur à travers des erreurs d'arithmétique de pointeurs dans la boucle de mise à jour de la table.
Source: Hacker News · Résumé par HeadlinesBriefing