diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-04-21 16:13:21 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-05-01 10:00:22 -0400 |
commit | 314809d7cdda82d6c2741dbe2daf119270e5ad02 (patch) | |
tree | 6fe3ede8bac16e227d1046611e4bcb827fd99e39 /src/mongo/db/update/path_support.cpp | |
parent | 5273c2bad7df58c44afdd677609b8656f399a906 (diff) | |
download | mongo-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.cpp | 14 |
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); |