42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
// Basic tests for a form of stack recursion that's been shown to cause C++
|
|
// side stack overflows in the past. See SERVER-19614.
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
db.recursion.drop();
|
|
|
|
// Make sure the shell doesn't blow up
|
|
function shellRecursion() {
|
|
shellRecursion.apply();
|
|
}
|
|
assert.throws(shellRecursion);
|
|
|
|
// Make sure db.eval doesn't blow up
|
|
function dbEvalRecursion() {
|
|
db.eval(function() {
|
|
function recursion() {
|
|
recursion.apply();
|
|
}
|
|
recursion();
|
|
});
|
|
}
|
|
assert.commandFailedWithCode(assert.throws(dbEvalRecursion), ErrorCodes.JSInterpreterFailure);
|
|
|
|
// Make sure mapReduce doesn't blow up
|
|
function mapReduceRecursion() {
|
|
db.recursion.mapReduce(
|
|
function() {
|
|
(function recursion() {
|
|
recursion.apply();
|
|
})();
|
|
},
|
|
function() {},
|
|
{out: 'inline'});
|
|
}
|
|
|
|
db.recursion.insert({});
|
|
assert.commandFailedWithCode(assert.throws(mapReduceRecursion),
|
|
ErrorCodes.JSInterpreterFailure);
|
|
}());
|