summaryrefslogtreecommitdiff
path: root/src/mongo/db/update/path_support.cpp
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2017-04-21 16:13:21 -0400
committerTess Avitabile <tess.avitabile@mongodb.com>2017-05-01 10:00:22 -0400
commit314809d7cdda82d6c2741dbe2daf119270e5ad02 (patch)
tree6fe3ede8bac16e227d1046611e4bcb827fd99e39 /src/mongo/db/update/path_support.cpp
parent5273c2bad7df58c44afdd677609b8656f399a906 (diff)
downloadmongo-314809d7cdda82d6c2741dbe2daf119270e5ad02.tar.gz
SERVER-28759 Implement SetNode::apply()
Diffstat (limited to 'src/mongo/db/update/path_support.cpp')
-rw-r--r--src/mongo/db/update/path_support.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mongo/db/update/path_support.cpp b/src/mongo/db/update/path_support.cpp
index 5e336bb8202..993d4195bc4 100644
--- a/src/mongo/db/update/path_support.cpp
+++ b/src/mongo/db/update/path_support.cpp
@@ -162,6 +162,14 @@ Status createPathAt(const FieldRef& prefix,
mutablebson::Element newElem) {
Status status = Status::OK();
+ if (elemFound.getType() != BSONType::Object && elemFound.getType() != BSONType::Array) {
+ return Status(ErrorCodes::PathNotViable,
+ str::stream() << "Cannot create field '" << prefix.getPart(idxFound)
+ << "' in element {"
+ << elemFound.toString()
+ << "}");
+ }
+
// Sanity check that 'idxField' is an actual part.
const size_t size = prefix.numParts();
if (idxFound >= size) {
@@ -177,7 +185,11 @@ Status createPathAt(const FieldRef& prefix,
if (elemFound.getType() == mongo::Array) {
size_t newIdx = 0;
if (!isNumeric(prefix.getPart(idxFound), &newIdx)) {
- return Status(ErrorCodes::InvalidPath, "Array require numeric fields");
+ return Status(ErrorCodes::PathNotViable,
+ str::stream() << "Cannot create field '" << prefix.getPart(idxFound)
+ << "' in element {"
+ << elemFound.toString()
+ << "}");
}
status = maybePadTo(&elemFound, newIdx);