- GTA San Andreas का 20 साल पुराना bug Windows 11 24H2 में सामने आया
- GTA San Andreas में Skimmer विमान के Windows 11 24H2 पर गायब होने का bug रिपोर्ट हुआ
- SilentPatch इस्तेमाल करने पर भी समस्या हल नहीं होती
- Windows 11 23H2 में यह समस्या नहीं होती
- Windows 11 24H2 में अपडेट करने वाले सभी users ने यह bug अनुभव किया
bug की जाँच
क्या गलत हुआ?
- SilentPatch इंस्टॉल करने पर game फ्रीज़ होने की समस्या होती है
CPlane::PreRender में एक छोटे loop में फँसने की स्थिति मिली
- विमान की blade speed असामान्य रूप से बहुत अधिक सेट हो रही थी
- blade speed की गणना विमान की ऊँचाई के अनुपात में होती है
क्यों और कैसे?
- Skimmer की
vehicles.ide definition में ज़रूरी parameter गायब है
- Vice City में Skimmer को boat के रूप में define किया गया था
- San Andreas में इसे plane में बदल दिया गया, लेकिन ज़रूरी parameter नहीं जोड़ा गया
असली root cause
- Windows 11 24H2 में stack उपयोग का तरीका बदलने से यह समस्या हुई
LeaveCriticalSection अब stack space ज़्यादा इस्तेमाल करता है
- पहले
fgets और LeaveCriticalSection stack space को overwrite नहीं करते थे, लेकिन अब करते हैं
यह समस्या अब तक क्यों नहीं आई?
- Windows 11 24H2 के बदलावों की वजह से stack space बदल गया
- game ने uninitialized local variable का उपयोग किया, जिससे यह समस्या हुई
- अन्य platforms पर यह समस्या पहले ही ठीक की जा चुकी थी
अगर आप game में यह समस्या ठीक करना चाहते हैं?
- अगली SilentPatch hotfix में code fix शामिल होगा
vehicles.ide फ़ाइल को manually edit करके भी समस्या हल की जा सकती है
अंतिम बात
- यह bug दिलचस्प है क्योंकि यह सीधे एक खास OS release से जुड़ा है
- यह दिखाता है कि stack layout में बदलाव compatibility को प्रभावित कर सकते हैं
- input data को validate करना चाहिए और compiler warnings को नज़रअंदाज़ नहीं करना चाहिए
1 टिप्पणियां
Hacker News की राय
scanfकी return value चेक नहीं की गई, ताकि यह पुष्टि हो सके कि वह parameters की संख्या से मेल खाती है. वरना यह compiler को ऐसी data file error जैसी चीज़ लगेगी जिसे वह जान ही नहीं सकता-fsanitize=undefined,addressजैसे tools का उपयोग करें