diff options
Diffstat (limited to 'src/mongo/db/pipeline/expression.cpp')
-rw-r--r-- | src/mongo/db/pipeline/expression.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp index f1f55f6d4d3..8c5ef56f5f2 100644 --- a/src/mongo/db/pipeline/expression.cpp +++ b/src/mongo/db/pipeline/expression.cpp @@ -665,7 +665,13 @@ Value ExpressionArrayToObject::evaluate(const Document& root, Variables* variabl << typeName(valArray[0].getType()), (valArray[0].getType() == BSONType::String)); - output[valArray[0].getString()] = valArray[1]; + auto keyName = valArray[0].getStringData(); + + uassert(4940400, + "Key field cannot contain an embedded null byte", + keyName.find('\0') == std::string::npos); + + output[keyName] = valArray[1]; } else { uassert( @@ -697,7 +703,13 @@ Value ExpressionArrayToObject::evaluate(const Document& root, Variables* variabl << typeName(key.getType()), (key.getType() == BSONType::String)); - output[key.getString()] = value; + auto keyName = key.getStringData(); + + uassert(4940401, + "Key field cannot contain an embedded null byte", + keyName.find('\0') == std::string::npos); + + output[keyName] = value; } } |