マーシャルに気をつけよう

2週間前ほどひどいバグにあいました。Windowsのみのバグでしたが、ほとんど毎回起こっていたのです。結果は処理できない例外で、そのままプログラムが落ちてクラッシュダンプしかない残っていませんでした。嬉しいことでVisual Studioはそのダプを読み込みし、デバッグを行うことができます。例外コードは0xC0000374 (STATUS_HEAP_CORRUPTION)でした。この例外の特徴は問題を起こしたところで落ちるのは珍しいということですが、運が良く問題の原因が分かりました。問題はこの関数にあります。分かりますか?

そうです、SecureStringMarshal.SecureStringToGlobalAllocAnsiで作って、Marshal.ZeroFreeGlobalAllocUnicodeで処理しています。ということで、処理している時に文字列の境界を超えていたでしょう。習うべきなのはマーシャルを正しく使わんければ、見つけにくいバグが出て来るのですよ!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s