- Bug GTA San Andreas yang sudah berusia 20 tahun muncul di Windows 11 24H2
- Dilaporkan ada bug di GTA San Andreas yang membuat pesawat Skimmer menghilang di Windows 11 24H2
- Masalah ini tidak teratasi meskipun menggunakan SilentPatch
- Masalah tidak terjadi di Windows 11 23H2
- Semua pengguna yang memperbarui ke Windows 11 24H2 mengalami bug ini
Investigasi bug
Apa yang salah?
- Saat SilentPatch dipasang, game mengalami hang
- Ditemukan bahwa game terjebak dalam loop kecil di
CPlane::PreRender
- Kecepatan baling-baling pesawat disetel sangat tinggi secara tidak normal
- Kecepatan baling-baling dihitung secara proporsional terhadap ketinggian pesawat
Mengapa dan bagaimana?
- Parameter yang diperlukan hilang dari definisi
vehicles.ide milik Skimmer
- Di Vice City, Skimmer didefinisikan sebagai perahu
- Di San Andreas, Skimmer diubah menjadi pesawat, tetapi parameter yang diperlukan tidak ditambahkan
Akar penyebab yang sebenarnya
- Masalah terjadi karena cara penggunaan stack berubah di Windows 11 24H2
LeaveCriticalSection menjadi menggunakan lebih banyak ruang stack
- Sebelumnya
fgets dan LeaveCriticalSection tidak menimpa ruang stack, tetapi sekarang menimpanya
Mengapa masalah ini baru muncul sekarang?
- Perubahan di Windows 11 24H2 menyebabkan ruang stack berubah
- Masalah terjadi karena game menggunakan variabel lokal yang belum diinisialisasi
- Di platform lain, masalah ini sebenarnya sudah diperbaiki
Jika ingin memperbaiki masalah ini di dalam game?
- Perbaikan kode akan disertakan dalam hotfix SilentPatch berikutnya
- Masalah juga bisa diatasi dengan mengedit file
vehicles.ide secara manual
Kata penutup
- Bug ini menarik karena terhubung langsung dengan rilis OS tertentu
- Ini menunjukkan bahwa perubahan tata letak stack dapat memengaruhi kompatibilitas
- Data input harus divalidasi dan peringatan compiler tidak boleh diabaikan
1 komentar
Komentar Hacker News
scanftidak diperiksa untuk memastikan cocok dengan jumlah parameter. Selain itu, ini tampak seperti kesalahan file data yang tidak bisa diketahui kompilator-fsanitize=undefined,addressuntuk menangkap undefined behavior saat runtime