Files
mongo/jstests/aggregation/bugs/server17224.js
Mathias Stearn a0db932113 SERVER-17224 Reserve room for EOO byte when starting BSONObj building
Since _done() is called from ~BSONObjBuilder we need to ensure that it cannot
fail. This prevents a double exception leading to a std::terminate call.

This also resolves SERVER-17226.
2015-03-05 13:22:19 -05:00

25 lines
817 B
JavaScript

// SERVER-17224 An aggregation result with exactly the right size could crash the server rather than
// returning an error.
(function() {
'use strict';
var t = db.server17224;
t.drop();
// first 63MB
for (var i = 0; i < 63; i++) {
t.insert({a: new Array(1024 * 1024 + 1).join('a')});
}
// the remaining ~1MB with room for field names and other overhead
t.insert({a: new Array(1024 * 1024 - 1105).join('a')});
// do not use cursor form, since it has a different workaroud for this issue.
assert.commandFailed(
db.runCommand({aggregate: t.getName(),
pipeline: [{$match: {}}, {$group: {_id: null, arr: {$push: {a: '$a'}}}}]}));
// Make sure the server is still up.
assert.commandWorked(db.runCommand('ping'));
}());