HeadlinesBriefing HeadlinesBriefing.com

Ошибка wild pointer Infidel

Hacker News •
×

Planetfall был выпущен вчера, но я потратил недели на Infidel. Нашел ужасную ошибку: дикий указатель, который скриблит память. Большинство считают это тривиальной, но как программист на C, я считаю порчу памяти самым тяжким грехом. Это также ошибка компилятора. Infidel использует ENDLESS-DESERT для симуляции неотображенных областей. Выброшенные предметы попадают в DESERT-TABLE с lat/long. Рутена DESERT-TO-TABLE имеет ошибку, где она некорректно обрабатывает аргумент SLOC, вызывая порчу памяти. Ошибка трудно обнаружить, так как у предметов есть шанс один из трех потеряться в песке. Я проанализировал релиз Infidel 22 serial 840522 (обновление для Macintosh); оригинальный релиз 830916 имеет ту же ошибку. Рутена пишет в DESERT-TABLE с неверным индексом, перезаписывая смежную память. Это нарушает безопасность памяти, несмотря на минимальное влияние на игру. Реализация Z-machine обнажает ошибку через ошибки арифметики указателей в цикле обновления таблицы.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing