Planetfall yesterday公开发布,但我花了几周时间在Infidel上。我发现了一个恶劣的Bug:一个野指针在内存中涂鸦。大多数人认为这很琐碎,但作为一个C程序员,我将内存破坏视为最严重的罪过。这也是一个编译器Bug。Infidel使用ENDLESS-DESERT来模拟未映射区域。丢弃的物品去DESERT-TABLE,带有纬度/经度。DESERT-TO-TABLE例程有一个Bug,其中它未能正确处理SLOC参数,导致内存破坏。这个Bug很难检测,因为物品有三分之一的几率丢失到沙子中。我分析了Infidel发行版22 serial 840522(Macintosh更新);原始发行版830916有相同的Bug。该例程使用错误的索引写入DESERT-TABLE,覆盖相邻内存。这违反了内存安全,尽管对游戏玩法影响最小。Z机器实现通过表更新循环中的指针算术错误暴露了这个缺陷。
来源: Hacker News · 由HeadlinesBriefing整理摘要