保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var Fiber = require('fibers');
 
// Calculate how far we can go recurse without hitting the JS stack limit
function calculateStackSpace() {
    var max = 0;
    function testRecursion(ii) {
        ++max;
        testRecursion(ii + 1);
    }
    try {
        testRecursion();
    } catch (err) {}
    return max;
}
 
// Invoke a RepExp operation that eats a lot of stack space
function pathologicRegExp(preStack) {
    function fn() {
        var foo = '';
        for (var ii = 0; ii < 1024; ++ii) {
            foo += 'a';
        }
        new RegExp(foo, 'g');
    }
 
    // Recurse to the limit and then invoke a stack-heavy C++ operation
    function wasteStack(ii) {
        ii ? wasteStack(ii - 1) : fn();
    }
    wasteStack(preStack);
}
 
Fiber(function() {
 
    // Ensure that this doesn't ruin everything while in a fiber
    var max = calculateStackSpace();
    for (var stack = max; stack > 0; --stack) {
        try {
            pathologicRegExp(stack);
            break;
        } catch (err) {}
    }
}).run();
 
console.log('pass');