For those interested, the responsible code is located here:
dontclick://fiddle.jshell.net/n3Wa3/show/light/
And here is the code:
<script>
function Hackology()
{
var buffer = '\x42';
for (i =0;i<666;i++)
{
buffer+=buffer+'\x42';
document.write('<html><marquee><h1>'+buffer+buffer);
}
}
</script>That would be ideal, yes. Firefox still doesn't work this way, I think? Chrome (or rather: SRWare Iron in my case) does, though: this link, which I obviously had to click (I make no excuse :P) did crash the tab I opened it in, but it had zero influence on the rest of the tabs, or the interface in general.
True. The current Firefox locks up, then announces a crash:
http://i.imgur.com/vgd8PLV.png
So on that basis, Firefox isn't a "modern browser". :)
Any JavaScript that hogs the thread it's running in will cause this kind of problem. If the thread happens to be the same one the browser is running under, then "crash" is a fair description.
function hog_processor() {
while(true) {
}
}
-- or unintentionally, by not knowing something about programming: function beginner_error_run_forever() {
for(var x = 0;x != 10;x += .1) {
// code here
}
}the while(1); thing could be explained easily, but the code for this one (written below) is not simply an endless loop
You may find this enlightening: Not only do nontrivial programs sometimes have unevaluated ways that will prevent their termination, but it's been proven that there cannot be a deterministic way to prove that a program will or will not terminate.
The Turing halting problem (will a given program terminate), and Godel's Incompleteness Theorems (nontrivial axiomatic systems can make true statements that cannot be proven), are connected -- each implies the other. And both have been shown to be more than educated guesses about reality.
And "crash" is an exaggeration. The browser is prevented from functioning until it figures out that its processing power is being absorbed in something pointless, for example by badly written JavaScript:
A modern browser assigns a thread to each process and monitors each thread, so it can act to stop unresponsive threads. That's what happens in this case. It's not a "crash", unless bringing a car to a safe stop at a red light counts as a crash.