Firefoxをクラッシュさせるスクリプトの実行方法

今日はゼミの飲み会行ってきました。家に帰ってきてちょっと寝そうになってましたが,ブログを継続してつけようって決めたところなので今から頑張って書こうと思います。


さて,何を書こうかなというところですが・・Firefoxで試してて見たある現象についてでも書きます。昨日書いた,Googleガジェット周りで色々実験をしていて見つけました。


アドレスバーにjavascript:〜と書いて,スクリプトブックマークレットを実行するのはお馴染みですね。そこの部分にprototype.jsの,ややロングなスクリプトをeval("〜・・・")で実行すると,スクリプトがエラーなく通ります。javascript:alert(Prototype.Version)を実行するとバージョンが表示され,prototype.jsの実行結果が反映された状態になります。一見,普通な状態なのですが,その後適当にリンクをクリックしてページを移動しようとしたらFirefoxが落ちます。


これを利用して,準ブラクラみたいページが作れてしまわないでしょうか?想定外の利用のされ方だから仕方ないのでしょうかね。
以下に,僕の環境での現象の再現方法を書きます。


現象の再現方法:
1. Firefox2.0.0.7を利用
2. Prototype.jsのバージョンは1.5.1.1
3. Prototype.jsをevalで実行する場合,そのままだとエラーになるので,以下のような感じでエスケープ処理をする。

/* PHPソース */
$line = str_replace("\\", "\\\\", $line);
$line = preg_replace("/(\r\n|\n)/", "\\n", $line);
$line = str_replace('"', '\\"', $line);

もし面倒くさければ,http://masutaro.jp/js-run/parse.phpから変換後のprototype.jsソースが得られますので,コピペでもしてください。※別の用途で使うために作っていたものなので,という感じのXML形式で表示されます。内からprototype.jsのソースだけコピーしてください。


4. アドレスバーのところでjavascript:eval("〜・・")で評価する。
5. しばらく(2〜3秒)評価に時間がかかる。その後,適当にリンクをクリックする。


とりあえず上記方法で落ちるはずです。落ちないよとかありましたら,コメント欄にて教えていただけると嬉しいです。


#追記
・evalはeval("〜")とダブルクォーテーションで囲って実行するようにしてください。これは僕が上記エスケープ処理でダブルクォーテーションのほうをエスケープするようにしているためです。なのでシングルクォーテーションをエスケープするようにした場合は,この限りではありません。

・evalを実行後,別のタブでリンクをクリックした場合は落ちません。