IE在解釋表達式的時候顯然大有優(yōu)化的余地,FireFox就沒這個毛病。下面這段小代碼可以輕松讓IE崩潰掉:
var n=32768;
var s=new Array(n).join("0+")+0;
if(confirm("真的要殺了瀏覽器嗎?")){
eval(s);
alert("殺不掉,試試把n調大一點?");
}
其實就是讓IE解析一個“0+0+0+0....”的表達式。
在我的機器上,IE6跑到32255就自動關閉了(可以作為一個新的無提示關閉瀏覽器漏洞呵呵,會把同一個進程打開的全部窗口一起殺掉),IE7還要差些,在31515就掛了。opera也好不到哪里去,32180就崩潰了。而FireFox一直跑到2^27(ie和opera還不到2^15)的時候把我的內存全吃光了,在虛擬內存支持下還是可以執(zhí)行完成:
var s="0+",n=27 ;
for(var i=0;i<n;i++) s+=s;
alert(s.length/2)
s+=0;
if(confirm("真的要殺了瀏覽器嗎?")){
eval(s);
alert("殺不掉,試試把n調大一點?");
}
一直到2^28的時候,字符串構造失敗了才罷休。