summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
authorBlake Oler <blake.oler@mongodb.com>2018-02-05 14:40:07 -0500
committerBlake Oler <blake.oler@mongodb.com>2018-02-06 13:56:07 -0500
commit09390471ac2f63a168175b99b83a7ec7a679fde4 (patch)
treec57fa9cfa55e74579d3ce38552f1cc398ec5c16f /src/mongo/s
parent3a26a9072c9935c08289d5f9a8d75c20017db1a4 (diff)
downloadmongo-09390471ac2f63a168175b99b83a7ec7a679fde4.tar.gz
SERVER-32862 Prevent zone key field names from possessing invalid prefixes
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/catalog/type_chunk.cpp5
-rw-r--r--src/mongo/s/request_types/update_zone_key_range_request_test.cpp20
2 files changed, 25 insertions, 0 deletions
diff --git a/src/mongo/s/catalog/type_chunk.cpp b/src/mongo/s/catalog/type_chunk.cpp
index abec9536642..58a181240a9 100644
--- a/src/mongo/s/catalog/type_chunk.cpp
+++ b/src/mongo/s/catalog/type_chunk.cpp
@@ -75,6 +75,11 @@ Status extractObject(const BSONObj& obj, const std::string& fieldName, BSONEleme
str::stream() << "The field '" << fieldName << "' cannot be empty"};
}
+ auto validForStorageStatus = bsonElement->Obj().storageValidEmbedded();
+ if (!validForStorageStatus.isOK()) {
+ return validForStorageStatus;
+ }
+
return Status::OK();
}
diff --git a/src/mongo/s/request_types/update_zone_key_range_request_test.cpp b/src/mongo/s/request_types/update_zone_key_range_request_test.cpp
index 0a4fa4452fb..e687c06c590 100644
--- a/src/mongo/s/request_types/update_zone_key_range_request_test.cpp
+++ b/src/mongo/s/request_types/update_zone_key_range_request_test.cpp
@@ -196,6 +196,26 @@ TEST(UpdateZoneKeyRangeRequest, WrongMaxRangeTypeErrors) {
ASSERT_EQ(ErrorCodes::TypeMismatch, request.getStatus());
}
+TEST(UpdateZoneKeyRangeRequest, WrongPrefixCharacterMinErrors) {
+ auto request = UpdateZoneKeyRangeRequest::parseFromMongosCommand(fromjson(R"BSON({
+ updateZoneKeyRange: "foo.bar",
+ min: { $x: 1 },
+ max: { x: 100 },
+ zone: "z"
+ })BSON"));
+ ASSERT_EQ(ErrorCodes::DollarPrefixedFieldName, request.getStatus());
+}
+
+TEST(UpdateZoneKeyRangeRequest, WrongPrefixCharacterMaxErrors) {
+ auto request = UpdateZoneKeyRangeRequest::parseFromMongosCommand(fromjson(R"BSON({
+ updateZoneKeyRange: "foo.bar",
+ min: { x: 1 },
+ max: { $x: 100 },
+ zone: "z"
+ })BSON"));
+ ASSERT_EQ(ErrorCodes::DollarPrefixedFieldName, request.getStatus());
+}
+
TEST(UpdateZoneKeyRangeRequest, WrongZoneNameTypeErrors) {
auto request = UpdateZoneKeyRangeRequest::parseFromMongosCommand(fromjson(R"BSON({
updateZoneKeyRange: "foo.bar",