Planetfall wurde gestern öffentlich veröffentlicht, aber ich habe Wochen an Infidel verbracht. Ich fand einen egregiosen Bug: einen wilden Pointer, der über den Speicher schreibt. Die meisten halten es für trivial, aber als C-Programmierer sehe ich Speicherverstöße als die schlimmste Sünde.
Es ist auch ein Compiler-Bug. Infidel verwendet ENDLESS-DESERT, um nicht zugeordnete Bereiche zu simulieren. Abgelegte Gegenstände gehen nach DESERT-TABLE mit lat/long.
Die DESERT-TO-TABLE-Routine hat einen Bug, bei dem sie das SLOC-Argument nicht ordnungsgemäß handhabt und so Speicherverstöße verursacht. Der Bug ist schwer zu erkennen, weil Gegenstände eine Ein-Drei-Chance haben, in der Sand zu gehen. Ich analysierte Infidel Release 22 serial 840522 (Macintosh-Update); die Originalfreigabe 830916 hat denselben Bug.
Die Routine schreibt mit falscher Indizierung in DESERT-TABLE, überschreibt benachbarten Speicher. Dies verletzt die Speichersicherheit trotz minimaler Spielauswirkung. Die Z-Machine-Implementierung macht den Fehler durch Pointer-Arithmetik-Fehler im Tabellenaktualisierungsloop sichtbar.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing