Norton Internet Security
ある日突然WindowsUpdateが動かなくなった。
自動更新は有効にしてあるし、スタートメニューから開く、webベースでのWindowsUpdateが動かないだけで、重要な更新はちゃんとアップデートできるからそれほど問題ではない。
とは言ってもそれを放置しているのはまずい。
結論から言えば、ノートン・インターネット・セキュリティーに含まれる、ポップアップ遮断機能が原因だった。
その問題が起きたPCは、自分が普段使っている物ではなく、家族が使っている。ということもあってこれまで放置してしまっていたんだが、あるページを開くとエラーが出て進めないと言ってきたんで仕方なく原因を調べることに。
まず出てきたのがJavascript部でのstack overflowというエラーだった。これはこれまでにも違うページを開いたときに出てきたことがあるらしい。それは無視してログインしようとすると、エラーが出てしまうということだ。
とりあえず自分が普段使っているPCで同じページを開いてみたところ、何も問題は起きない。それぞれのソースを比較してみると、多少内容が違っていたから、スパイウエアの類かと思ってツールを使って検索してみたが問題なし。まあ全てのスパイウエアがこれで引っかかるという保証はないが。
ちなみに挿入されているのは以下のコード。
01: var SymRealOnLoad; 02: var SymRealOnUnload; 03: 04: function SymOnUnload() 05: { 06: window.open = SymWinOpen; 07: if(SymRealOnUnload != null) 08: SymRealOnUnload(); 09: } 10: 11: function SymOnLoad() 12: { 13: if(SymRealOnLoad != null) 14: SymRealOnLoad(); 15: window.open = SymRealWinOpen; 16: SymRealUnLoadOff=window.onunload; 17: window.UnLoadOff=SymOnUnload; 18: } 19: 20: SymRealOnLoad = window.onload; 21: window.onload = SymOnLoad;
これの14行目でスタックオーバーフローが起きていた。
コードの一部でぐぐってみたら、どうもこれはノートンさんが挿入しているらしいことがわかった。
onloadハンドルを保存しておき、onloadハンドルを書き換え、onloadが呼ばれたときには保存してあったハンドルがnullで無ければ元々の処理を呼び出す。これ、一体なんの意味があるんだろう…。unloadoffハンドルを設定するためなのかもしれないが、22行目からにそれを書いたらダメなんだろうか。
動作内容はともかくとして、とりあえずエラーの原因はわかったんだから後はポップアップ遮断機能をオフにするだけで解決。
「InternetExplorerではちょっと大きめのメモリを確保するとすぐオーバーフローする」という話は聞いたことがあったが、見たところ特にメモリを確保するような動作は行っていない。となると、あの部分で再帰の無限ループにでもなってしまっているのだろうか。
ちなみに、Operaで開いてみたところ、ソースは同じになったが特にエラーが出ることもなく普通に開くことが出来た。やはりIEがタコなんだろうか。