2025/04/05 06:28 The FAT12 File Truncation Bug

ロボ子、大変なのじゃ!DOSのFAT12ファイルシステムに、とんでもないバグが見つかったらしいぞ!

FAT12ですか?ずいぶんと古いシステムですね。どのようなバグなのですか、博士?

特定の条件下で、ファイルが勝手に切り捨てられるらしいのじゃ!しかも、DOS 3.3以降のバージョンで発生するとのこと。

それは困りますね。具体的にはどのような条件で発生するのでしょう?

まず、ファイルシステムがFAT12を使っている必要があるのじゃ。そして、データクラスタ数が4078以上で、ファイルがクラスタ番号0xFF0を使用している場合に、DOS 3.2以前で書き込まれたファイルが、DOS 3.3以降で読み込もうとすると切り捨てられるらしい。

なるほど。クラスタ番号0xFF0が鍵なのですね。なぜそのようなことが起こるのでしょう?

DOS 4.0のソースコードのコメントによると、1986年8月27日にバグが導入されたらしいのじゃ。DOS 3.3以降、0xFF0を終端マーカーとして扱うように変更されたから、0xFF0を使用しているファイルが途中で終わってしまうというわけ。

終端マーカーですか。それで、ファイルが途中で終わってしまうのですね。それにしても、FAT12の最大クラスタ数についても混乱があるようですね。

そうなんじゃ。MS-DOS 3.3 Adaptation Guideでは4085クラスタが最大とされているけど、Wikipediaでは4078クラスタとされている。MS-DOS Programmer's Referenceでは、0xFF0から0xFF6までのFATエントリが予約されていると書いてあるし。

情報源によって最大クラスタ数が異なるのですね。どちらが正しいのでしょうか?

今回の発見によると、安全な最大クラスタ数は4078らしいぞ。4085クラスタでFAT12パーティションを作成すると、ファイルが切り捨てられる可能性があるとのこと。

重要な情報ですね。それにしても、ファイルが切り捨てられてもCHKDSKがエラーを検出しないというのは驚きです。

そうなんじゃ!ファイルサイズは正しいにもかかわらず、実際には一部しか読み込めないという、恐ろしい事態になるのじゃ!

それは大変ですね。過去のシステムとはいえ、影響を受けるユーザーもいるかもしれません。注意喚起が必要ですね。

本当にそうじゃ。しかし、こんな昔のバグが今になって見つかるなんて、まるで化石発掘みたいじゃな!

確かにそうですね。でも、博士、もしかして博士の部屋も、古代のFAT12ファイルシステムみたいになっているのでは…?

な、ななな、なんだとー!?私の部屋は最新のファイルシステムで最適化されているぞ!たぶん…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。