以下のソフトをリリースしました。
変更点 §
- findfで8+3ファイル名を持たない長いファイル名があると落ちる問題を解消
説明 §
Windows 95以降、通常、長いファイル名には互換のための短いファイル名が付きます。これを前提にオリジナルのソースは、以下のようなコードが書かれていました。
- 短いファイル名が存在しないとき、長いファイル名は短いはずである
- 短いファイル名用に確保されたメモリに、長いファイル名から取得したファイル名をコピーしても安全である
しかし、現在は希に以下の条件を満たすケースが存在するようです。
- 長いファイル名が短いファイル名よりも長い
- 短いファイル名が存在しない
このバージョンでは存在しない短いファイル名の代わりにダミーを入れることで落ちないように修正しました。短いファイル名による探索は失敗する可能性がありますが、「もともと存在しなかった名前」なので、もともと失敗したかも知れない検索です。
感想 §
つまり、確保されたメモリを超えて書き込んでしまうオーバーランが起こっていました。条件が特定できず、困っていましたが、それでも条件を煮詰めていくと解決できました。
別バージョンのコンパイラが作成した作業ファイルを手動削除すると急に結果がぶれなくなったのは意外ですが。(IDEからクリーンするだけでは消えないファイルがあったもよう)