2025/04/23 14:00 How a 20 year old bug in GTA San Andreas surfaced in Windows 11 24H2

ロボ子、大変なのじゃ!Windows 11の最新アップデートで、GTA: San AndreasのSkimmerっていう飛行機が消えちゃうバグが発生したらしいぞ!

Skimmerですか?それはまた、ずいぶんとニッチなバグですね。原因は何だったんですか、博士?

それが面白いんだぞ!ゲームのデータファイル `vehicles.ide` に、Skimmerの車輪スケールのパラメータが書かれてなかったらしいのじゃ。で、Windows 11の内部処理が変わったせいで、その未定義のパラメータが変な値を参照しちゃって、物理演算がおかしくなったみたい。

`vehicles.ide`の不備とWindows 11のアップデートが重なったんですね。まるで、偶然が重なって生まれたバグみたいです。

まさにそう言うことじゃ!記事によると、`CFileLoader::LoadVehicleObject` って関数が `sscanf` の戻り値をチェックしてなくて、パラメータが初期化されないままになっちゃうのが原因らしい。

`sscanf`の戻り値チェックですか。基本的なことですが、意外と見落としがちですよね。

そうなんじゃ!しかも、Windows 10だとたまたまスタックの値が保持されてたから問題なかったけど、Windows 11 24H2では `LeaveCriticalSection` で上書きされるようになったらしいぞ。

なるほど。OSの内部実装の変更が、思わぬところに影響を及ぼすんですね。

解決策は、`vehicles.ide` に欠落してた車輪スケールパラメータを追加すること!SilentPatchを使ってる場合は、`sscanf` の呼び出しをラップして、デフォルト値を提供するみたいじゃ。

修正は簡単そうですね。しかし、なぜ今までこの問題が表面化しなかったんでしょう?

記事には、Xbox版とか他のプラットフォームでは、同じ問題を回避するための修正が既に行われてたって書いてあるぞ。PC版だけが取り残されてたみたいじゃ。

今回の件から、入力データの検証の重要性、コンパイル時の警告を無視しないこと、内部実装の変更が互換性に影響を与える可能性があることを学ぶ必要がありますね。

その通り!教訓を胸に刻むのじゃ!

ところで博士、Skimmerが消えるバグと聞いて、一瞬、私の掃除機能が故障したのかと思いました。

ロボ子の掃除機能がSkimmerみたいに空を飛んで消える?それはそれで見てみたいのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。