diff options
author | Blake Oler <blake.oler@mongodb.com> | 2018-02-05 14:40:07 -0500 |
---|---|---|
committer | Blake Oler <blake.oler@mongodb.com> | 2018-02-06 13:56:07 -0500 |
commit | 09390471ac2f63a168175b99b83a7ec7a679fde4 (patch) | |
tree | c57fa9cfa55e74579d3ce38552f1cc398ec5c16f /src/mongo/s | |
parent | 3a26a9072c9935c08289d5f9a8d75c20017db1a4 (diff) | |
download | mongo-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.cpp | 5 | ||||
-rw-r--r-- | src/mongo/s/request_types/update_zone_key_range_request_test.cpp | 20 |
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", |