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