تم إصدار Planetfall بالأمس، لكنني قضيت أسابيع على Infidel. عثرت على خطأ فظيع: مؤشر بريء scribbles على الذاكرة. يراها معظم الناس بسيطة، لكن كمبرمج C، أرى تلف الذاكرة كأشد الذنوب. إنه أيضًا خطأ في المترجم. Infidel يستخدم ENDLESS-DESERT لمحاكاة المناطق غير الموصوفة. العناصر الملقاة تذهب إلى DESERT-TABLE مع lat/long. روتين DESERT-TO-TABLE به خطأ حيث يفشل في التعامل بشكل صحيح مع Argument SLOC، مما يسبب تلف الذاكرة. هذا الخطأ صعب الكشف لأن العناصر لديها فرصة من ثلاثة إلى ضياعها في الرمال. قمت بتحليل إصدار Infidel 22 serial 840522 (تحديث Macintosh)؛ الإصدار الأصلي 830916 له نفس الخطأ. الروتين يكتب على DESERT-TABLE باستخدام فهرس خاطئ، ممسحًا الذاكرة المجاورة. هذا ينتهك سلامة الذاكرة رغم التأثير البسيط على اللعب. تنفيذ Z-machine يكشف الخطأ من خلال أخطاء حسابات المؤشرات في حلقة تحديث الجدول.
المصدر: Hacker News · لخّصه HeadlinesBriefing