コード全体を次に示しますvar x = []; x[0x7fffffff]=1; JSON.stringify(x);
var x = []; x[0x7fffffff]=1; JSON.stringify(x);
試してみたい人のために: jsfiddle
このような簡単な方法で、firefoxをしっかりとハングさせ、chromeタブを下げて、メインのnodejsスレッドをハングさせることができます。
これに関する最も注目すべきことは、
JSON.stringify
関数のネイティブコードレベルでハングが発生することです。これにより、単純な
while(true);
場合のように、同じfirefoxで実行を中断することはできません
while(true);
。
クロムのWebWorker内で実行されると、ページは応答し続けますが、終了はストリームを終了できません。
また、明らかな理由により、このようなコードはjslintによって検出されません。
仕組み
var x = []; x[0x7fffffff]=1; // 32 JSON.stringify(x); // x , null...
著者がどのようにしてこのような生活を始めたのか
それは午前2時を超え、私は長い間眠りましたが、それほど多くはありませんでしたが、仕事をしなければなりませんでした。
localStorage
にオブジェクトのコレクションを実装する必要がありました。 脳はすでにきついと思っていました、そして、最初は単純な配列がJSONとして保存するためにストレージのために選ばれました。 この場合、IDを使用する方が便利であることを認識した後、配列をオブジェクトに置き換え、次のコード
Math.random() * 0x7fffffff >> 0
使用してランダムIDを生成し、データをシリアル化してストレージに書き込みました。 その後、ランダムなページのフリーズが始まり、デバッグ中にコレクションが配列としてまだ初期化されていることが発見されました。
要約すると、自分自身に...
実際、
JSON.stringify
悪いというわけではありませんが、送信するものに注意する必要があります。
- もっと睡眠が必要
- より頻繁に寝る必要がある
- 数値IDがランダムな場合は、IDを作成しないでください(何かが発生した場合にエラーを見つけやすくなります)。
- 緩い類型化は時々悪です。
何人かの使い慣れたプログラマーがICQ用にリセットされたコードを理解しなかったことが判明したときに、私はメモを書くことにしました。