Bug Collection
Software Bugs

XBM 画像が表示できない!?

Windows XP SP2 の横暴

まず、次の 2 つの画像を確認していただこう。 同じ絵が 2 つ並んで表示されるはずなのだが、お使いのウェブ・ブラウザーは双方ともちゃんと表示してくれているだろうか。

Escher Knot - PNG 形式   Escher Knot - XBM 形式

Windows 上の標準ウェブ・ブラウザー Internet Explorer (IE) では、右側の画像が表示されないかもしれない。 じつは、この 2 つの画像はデータ形式 (フォーマット) が異なる。 同じ絵ではあるが、左側は PNG 形式で、右側の画像は XBM 形式でそれぞれ記録されたものである。 MIME タイプで言えば、左側は image/png、右側は image/x-xbitmap である。 そして、Windows XP Service Pack 2 (SP2) 以降の IE では、XBM 形式の画像が描画されなくなってしまったのだ。

マイクロソフトによる情報

2007 年 2 月の時点で、マイクロソフトのサイトには、この件に触れたページがいくつか公開されている。 たとえば、ずばり「Windows XP Service Pack 2 で xbm ファイルを表示することができない」と題したサポート技術情報 914042 のページがある。 そしてそこには次のように述べられている。

Microsoft Windows XP Service Pack 2 を適用した後、拡張子 .xbm を持つファイルを開くことができなくなります。 Internet Explorer の安定した動作を考慮し、Windows XP Service Pack 2 では ".xbm" ファイルは無効に設定されています。

また、IE のセキュリティー更新プログラム 883939 について説明したセキュリティー情報 MS05-025 のページには、次のような記述がある。

Windows XP Service Pack 2 および Windows Server 2003 Service Pack 1 では、XBM イメージ ファイルのフォーマットをレンダリングしなくなりました。同じ変更をこの更新プログラムを適用した他のすべてのサポートしている Internet Explorer バージョンにも行います。この変更は Internet Explorer の処理が、無効な形式のイメージを表示している間に予想外に終了することを防ぐために行われました。 XBM フォーマットは、現在 Internet Explorer でサポートされておりません。

しかし、マイクロソフトはこれらの情報を、Windows XP SP2 のリリース当初から公開していたわけではない。 XP SP2 のリリースは 2004 年 8 月 (日本語版は 9 月) であったが、この件に関する情報は、リリース前はもちろん、リリース後もしばらくは公開されなかった。 XBM 画像を描画しないようにする変更は、黙って、こっそりとなされたのである。

XBM 画像無効化の影響

XBM 形式の画像がほとんど使われることのないものであれば、それが IE で描画されなくなったとしても大した問題ではなかったかもしれない。 だが、XBM 画像の利用者を多数擁する国があった。 中国である。

中国では、招商銀行など少なからぬウェブサイトが、ユーザー認証に XBM 画像を利用していたのだ。 サイトによって異同はあろうが、典型的な利用法は、ユーザー名やパスワードに加えて、ページ上に表示されている検証コードを手入力させるような認証方式とし、その検証コードを、動的に生成した XBM 画像によって表示するというものだ。 いわゆる「画像認証」である (CAPTCHA とも呼ばれる)。 その画像認証のための XBM 画像が IE で表示されなくなったため、多くの人がそれらのサイトにログインできなくなってしまったという。

そうした事態は、しかし、解決策がすぐにネット上に流れたため、やがて解消された。 IE に XBM 画像を表示させる方法が残されていたのだ (後述)。 おそらく、問い合わせを受けたマイクロソフトによって提示されたものであろう。 しかし、マイクロソフトのサイトにはそれを示すページはなかった。 Windows XP SP2 のリリース後しばらくは、この件についてネット検索しても中国語のページばかりがヒットするという状況が続いたのだった。

ついでに言えば、当サイトのトップ・ページに設置しているアクセス・カウンターの数字も XBM 画像である。 XBM 画像を描画しない IE を使って当サイトを訪れた人に、画像のリンクが切れているとか、管理の行き届いていないサイトだとか思われたとしたら、心外だなあ。

XBM 画像の表示を有効にする方法

Windows XP SP2 以降の IE で XBM 画像がサポートされなくなったとはいえ、XBM 画像を描画する機能自体が IE から削除されてしまったわけではない。 デフォルトの状態ではその機能が無効に設定されているだけで、設定を変えれば XBM 画像もちゃんと表示されるようになる。 ただし、この機能を利用することによって何らかの問題が発生しても、誰も責任を負ってくれない。 「サポートされない」とはそういうことだ。

XBM 画像の描画機能を有効にするには、上述のサポート技術情報 914042 にも記されているように、レジストリーを変更する必要がある。 具体的には、次のレジストリー・キーにエントリーを追加する。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security

追加するレジストリー・エントリーは次のとおり。

エントリー名 BlockXBM
データ型 DWORD
0 (0x00000000)

これを、レジストリー・エディター regedit.exe を開いて対話的に設定すればよい。

あるいは、レジストリー・エントリー・ファイル (.reg ファイル) を用意して設定することもできる。 すなわち、テキスト・エディターを開いて次の 4 行 (空行を含む) だけを入力する。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security]
"BlockXBM"=dword:00000000

ファイル名の拡張子を .reg としてこれを保存し、できたファイルをダブル・クリックすればよい。 マイクロソフトのサポート技術情報 310516 に .reg ファイルの書き方についての情報がある。

レジストリーを変更したら、IE を起動し直してみよう。 XBM 画像がちゃんと表示されるようになっているはずだ。 なお、レジストリー・エントリー BlockXBM は、XBM 画像の表示の可否を決めるための単なるフラグであり、その値を 1 にすれば XBM 画像は再び表示されなくなる。

ここで、お約束の警告をひとつ。 レジストリーを変更する場合は、自己の責任において実施してください。

ところで、IE 以外にも Windows 用のウェブ・ブラウザーはある。 FirefoxNetscapeOpera など、いずれもちゃんと XBM 画像を表示してくれるから、XBM 画像を見るだけならそれを使うという手もある。 もちろん、この際、IE から他のブラウザーに乗り換えてしまってもよかろう。

XBM フォーマット

XBM 形式は、X Window System で導入されたモノクロ 2 値のビットマップ画像のためのフォーマットで、その最大の特徴は画像データがテキストによって記録されるという点にある。 たとえば、ある 16×16 ドットの画像は、XBM 形式では次のようなテキストで表現される。

#define xlogo_width 16
#define xlogo_height 16
static char xlogo_bits[] = {
   0x0f, 0x80, 0x1e, 0x80, 0x3c, 0x40, 0x78, 0x20, 0x78, 0x10,
   0xf0, 0x08, 0xe0, 0x09, 0xc0, 0x05, 0xc0, 0x02, 0x40, 0x07,
   0x20, 0x0f, 0x20, 0x1e, 0x10, 0x1e, 0x08, 0x3c, 0x04, 0x78,
   0x02, 0xf0};

プログラミングの経験のある人ならばお分かりだろうが、これは C 言語である。 こうすることによって、X のアプリケーションがそのソースコードに直接これを #include することを可能にしているというわけだ。

画像データがテキストで表現されるため、XBM 画像はスクリプト言語で容易に扱うことができる。 とりわけ、簡単な画像をスクリプト言語で動的に生成するという目的には、XBM 形式はうってつけである。 中国のサイトが画像認証に XBM を利用していたのも、その点が最大の理由であろう。 何を隠そう、当サイトのアクセス・カウンターの数字も Perl スクリプトによって動的に生成されているのである。

なお、上に示したデータは X Window System のロゴ画像のものである。 これを表示させると次のようになる。

X Logo 16x16   X Logo 32x32

左側の小さいほうが 16×16 ドットのロゴ画像だが、これでは少々見にくいかと思い、32×32 ドットのものも一緒に示した。

XBM にまつわる IE の脆弱性

XBM 画像のサポートをやめた理由を、マイクロソフトは「無効な形式のイメージを表示している間に予想外に終了することを防ぐため」としている。

「無効な形式のイメージを表示している間に予想外に終了する」というのは、おそらく、2002 年 4 月 30 日にポーランドの Adam Błaszczyk 氏によって報告されたバグと同じものであろう。 その報告「IE/OE6.0 cannot handle malformed XBM files」によれば、IE には XBM データのチェックに関して問題があるため、データに異常のある XBM 画像を表示させようとすると終了してしまうのだという。

だが、Windows XP SP2 の IE では、このバグは確認できない。 どうやら、マイクロソフトはこのバグを修正してしまったようだ。 この XBM 画像の描画に関するバグを修正し、その上でなおかつ、デフォルトでは XBM 描画機能が無効になるようにした、ということであるらしい。

マイクロソフトの思惑

XBM 画像の処理に関するバグを修正してしまったのならば、なぜその描画機能を無効にする必要があったのか。 バグを修正したのならば、もはや「無効な形式のイメージを表示している間に予想外に終了すること」はないはずである。 それにもかかわらず、それを「防ぐため」と称してその機能自体を無効にしてしまったのはなぜか。 まさか、修正の仕方にあまり自信が持てなかったなどということはあるまい。

おそらく、マイクロソフトは XBM をほとんど利用されていない画像フォーマットであると考えたのであろう。 XBM の利用者の数は無視できるほど僅少であり、したがって XBM はどうでもいい画像フォーマットであると。 そんなどうでもいい画像フォーマットの描画処理のバグを指摘されたことがよほど腹に据えかねたか、あるいは、そんなどうでもいい画像フォーマットに二度と煩わされたくないとでも思ったか、とにかく、XBM などこの世から抹殺してしまいたいと考えたに違いない。

そして、XBM 画像のサポートをやめてしまっても問題なかろうと考えた。 どうでもいい画像フォーマットならば、それが IE で表示されなくなったとしてもほとんど影響はなかろうと。 だから、黙ってこっそりと、XBM の描画機能を無効にしたのだ。 圧倒的多数の利用者を擁するマイクロソフトだからこそできる発想である。 これを横暴と言わずして何と言おう。

XBM の描画機能を丸ごと削除してしまわずに、フラグを設けることによって残しておいたのは、万一の場合に備えての保険であろう。 しかし、その保険が役立つことになってしまった。 マイクロソフトの読みが外れたのである。 どうでもいい画像フォーマットどころか、XBM は中国の多数の人によって有効に利用されていたのである。

しかるに、IE に XBM 画像を表示させるには依然としてレジストリーを弄る必要がある。 バグを修正し、多数の利用者の存在を知ってもなお、XBM 画像をサポートしないとの方針をマイクロソフトは変えようとしないのである。マイクロソフトの横暴、ここに極まれりの感がある。

その後の動向

Windows XP SP2 のリリース時点における IE のバージョンは 6.0 であったが、マイクロソフトはその後、Internet Explorer 7 (IE7) をリリースした (2006 年 10 月、日本語版は 11 月)。 しかし、XBM 画像をサポートしない点に変わりはないようだ。 IE7 のリリース・ノートに次のようにある。

XBM, an imaging format designed for X-based systems, is no longer supported.

2007 年 1 月には、Windows XP の後継 OS となる Windows Vista がリリースされたが、この Windows Vista にも IE7 がバンドルされている。 XP 版の IE7 と Vista 版の IE7 とでは細かい点で機能に違いがあるようだが、リリース・ノートは共通である。 とくに明記されていないことからすれば、上のリリース・ノートの記述は Vista 版の IE7 にも適用されるのだろう。

ただ、IE7 でもレジストリー・エントリー BlockXBM を追加することによって XBM 画像の表示が有効になるのかどうかは確認していない。 情報をお寄せいただければ幸いです。

 



2007年2月11日公開
2007年2月19日更新
面独斎 (Mendoxi)
mendoxi@cam.hi-ho.ne.jp