summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline
diff options
context:
space:
mode:
authorJames Wahlin <james@mongodb.com>2020-09-16 14:07:21 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-10-22 16:13:16 +0000
commite57dbe7226c7f22c30c7c85265d0c0564dc714f1 (patch)
tree474db40d54c17d28e909719884d2b279b573775a /src/mongo/db/pipeline
parenteeb4b8aaffbcbb236b2d02e35dad919b4fa0aa80 (diff)
downloadmongo-e57dbe7226c7f22c30c7c85265d0c0564dc714f1.tar.gz
SERVER-50547 Pipeline length limit
Diffstat (limited to 'src/mongo/db/pipeline')
-rw-r--r--src/mongo/db/pipeline/pipeline.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/pipeline.cpp b/src/mongo/db/pipeline/pipeline.cpp
index 893316623b8..c53b5358d07 100644
--- a/src/mongo/db/pipeline/pipeline.cpp
+++ b/src/mongo/db/pipeline/pipeline.cpp
@@ -42,6 +42,7 @@
#include "mongo/db/pipeline/document_source_merge.h"
#include "mongo/db/pipeline/document_source_out.h"
#include "mongo/db/pipeline/expression_context.h"
+#include "mongo/db/query/query_knobs_gen.h"
#include "mongo/db/storage/storage_options.h"
#include "mongo/util/fail_point.h"
#include "mongo/util/str.h"
@@ -195,6 +196,12 @@ std::unique_ptr<Pipeline, PipelineDeleter> Pipeline::create(
void Pipeline::validateCommon() const {
size_t i = 0;
+
+ uassert(ErrorCodes::FailedToParse,
+ str::stream() << "Pipeline length must be no longer than "
+ << internalPipelineLengthLimit << " stages",
+ static_cast<int>(_sources.size()) <= internalPipelineLengthLimit);
+
for (auto&& stage : _sources) {
auto constraints = stage->constraints(_splitState);