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);
|
|
}());
|