[Vista/SV2008] LCMapStringは、一部の言語で間違ったマッピング結果を返すことがある

1 月 8th, 2009 | Tags: , ,

MSKB英語版: The “LCMapString” function may return incorrect mapping results for some languages in Windows Server 2008 and in Windows Vista (KB955612)

対象

  • Windows Vista
  • Windows Server 2008

現象

LCMapString 機能が、一部の言語では誤ったマッピング結果を返すことがあります。

このため、Exchange Server 2007では、特定のユーザがメールボックスにアクセスしようとしたときに、無限ループに陥ることがあります。そして、ディスク領域をすべて使い切り、メールサーバは応答しなくなってしまうことがあります。

(訳注: LCMapString は、全角・半角の変換を行うなど、言語特有(ロケール依存)の変換操作を行うための関数です)

原因

LCMapStringでは、ロケール(地域)、入力文字列と、文字列長を指定します。ここで文字列長を指定すると、入力文字列はヌル文字(\0)で終わる形にはならないはずです。(訳注:ヌル文字を終端とせず、文字列長によって終端を定める場合は、ヌル文字で終わらない形で入れてくるよね、という意味だと思われる)

もし、ロケールが二重圧縮(double compression)を使うなら、次の文字列が二重圧縮かどうかを変換中にシステムがチェックします。しかし、システムは、二重圧縮されたロケールで指定された文字列長を超えているかどうかをチェックしません。

ロケール文字列がヌル文字で終わっていれば、問題は起こりません。しかし、ページ境界上で終わっている場合は、システムがクラッシュするかもしれません。

解決策

修正プログラムが入手できます。

TOP