Skip to content

Commit 15deafb

Browse files
committed
SERVER-22646 return error status instead of invariant if addShard command's first element is non-String
1 parent e357d8d commit 15deafb

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

src/mongo/s/request_types/add_shard_request_type.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,29 +54,28 @@ AddShardRequest::AddShardRequest(ConnectionString connString)
5454

5555
StatusWith<AddShardRequest> AddShardRequest::parseFromMongosCommand(const BSONObj& obj) {
5656
invariant(obj.nFields() >= 1);
57-
58-
auto firstElement = obj.firstElement();
59-
invariant(firstElement.type() == BSONType::String);
60-
invariant(mongosAddShard.name() == firstElement.fieldNameStringData() ||
61-
mongosAddShardDeprecated.name() == firstElement.fieldNameStringData());
62-
57+
invariant(mongosAddShard.name() == obj.firstElement().fieldNameStringData() ||
58+
mongosAddShardDeprecated.name() == obj.firstElement().fieldNameStringData());
6359
return parseInternalFields(obj);
6460
}
6561

6662
StatusWith<AddShardRequest> AddShardRequest::parseFromConfigCommand(const BSONObj& obj) {
6763
invariant(obj.nFields() >= 1);
68-
69-
auto firstElement = obj.firstElement();
70-
invariant(firstElement.type() == BSONType::String);
71-
invariant(configsvrAddShard.name() == firstElement.fieldNameStringData());
72-
64+
invariant(configsvrAddShard.name() == obj.firstElement().fieldNameStringData());
7365
return parseInternalFields(obj);
7466
}
7567

7668
StatusWith<AddShardRequest> AddShardRequest::parseInternalFields(const BSONObj& obj) {
7769
// required fields
7870

79-
auto swConnString = ConnectionString::parse(obj.firstElement().valuestrsafe());
71+
auto firstElement = obj.firstElement();
72+
if (firstElement.type() != BSONType::String) {
73+
return {ErrorCodes::FailedToParse,
74+
stream() << "The first argument to " << firstElement.fieldNameStringData()
75+
<< " must be a string"};
76+
}
77+
78+
auto swConnString = ConnectionString::parse(firstElement.valuestrsafe());
8079
if (!swConnString.isOK()) {
8180
return swConnString.getStatus();
8281
}

0 commit comments

Comments
 (0)