ATLのセキュリティ更新の罠:Microsoft Updateの影響
投稿者: backy 投稿日時: 水, 2009/08/05 - 17:31
こんにちは。
7月の終わりにWindowsの緊急アップデートとしてVisual Studio関連の「MS09-035」がリリースされましたね。
この更新ATLのソースコードに不備があって、ユーザ環境はもちろんのこと開発環境も更新されてしまうんですよ。
でと、まじめに「MS09-035」を適用して、日々プログラムを開発してたんですが、ここに大きな落とし穴がありました。
ユーザさんってあんまり緊急アップデートを適用してないんですよね。。。
「MS09-035」を適用したあとに、Windows7対応も含めてあるモジュールを再ビルドしてリリースしたんです。
そしたら「Windows7 RC2では正常に動作するけど既存のVistaでは動作しないよ」と連絡がありました。
「うーん、Vistaでの動作に影響が出るはずはないのだけれど…」と少し悩みました。
いくつかの検証を経てようやくDLLがロードできていないことが判りまして、ここにきてようやく「あ! ラインタイムを更新しなくちゃ!!」と気がついたわけです。
開発環境で動いてもユーザ環境では動かないことがある、いやはや、分かっていても痛い目にあわなきゃ思い出せなかったです。
ということで、「MS09-035」を適用してからモジュールをビルドすると「テスト環境」や「ユーザ環境」でランタイムの更新が必要になります。
いままで動いていたのに突然動かなくなったということになりますのでどうぞご注意ください。

?の方のために補足
?の方のために補足情報。
開発者に対処を呼び掛け:
MSが臨時パッチをリリース、Visual StudioとIEの脆弱性を修正
http://www.itmedia.co.jp/enterprise/articles/0907/29/news017.html
マイクロソフト セキュリティ情報 MS09-035 - 警告
http://www.microsoft.com/japan/technet/security/bulletin/MS09-035.mspx
補足ありがとうござ
補足ありがとうございます。
ちなみに、今回ATLを更新することになったのは
Bug #1: A Typo! (打ち間違い)
Bug #2: Using ATL Property Maps to Instantiate a COM object
という非常にケアレスなミスが原因なんだそうです。
Bug #2はともかく Bug #1は
誤り:hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);
正解:hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);
という非常にしょうもないものでした。
void*を使うときはコンパイラがチェックしてくれないので要注意ですね。
詳しいことは英語ですが、こちらをご覧ください。
http://blogs.msdn.com/sdl/archive/2009/07/28/atl-ms09-035-and-the-sdl.as...