Skip to content

Commit b1fb702

Browse files
committed
Correction accoridng to suggestion
Co-authored-by: Oleksandr Poliakov <[email protected]>
1 parent 2f38bdb commit b1fb702

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

Diff for: src/MongoDB.Driver/Core/Configuration/ConnectionString.cs

+12-8
Original file line numberDiff line numberDiff line change
@@ -684,14 +684,18 @@ private ConnectionString BuildResolvedConnectionString(ConnectionStringScheme re
684684
.AllKeys
685685
.SelectMany(key => resolvedOptions
686686
.GetValues(key)
687-
.Select(value => $"{key}={Uri.EscapeDataString(value)}")));
687+
.Select(value => $"{key}={EscapeOptionValue(key, value)}")));
688688

689689
if (mergedOptions.Count > 0)
690690
{
691691
connectionString += "?" + string.Join("&", mergedOptions);
692692
}
693693

694694
return new ConnectionString(connectionString, isResolved: true);
695+
696+
string EscapeOptionValue(string key, string value)
697+
=> string.Equals(key, "authmechanismproperties", StringComparison.OrdinalIgnoreCase) ? value : Uri.EscapeDataString(value);
698+
695699
}
696700

697701
private void ExtractScheme(Match match)
@@ -758,7 +762,13 @@ private void ExtractOptions(Match match)
758762
var parts = option.Value.Split('=');
759763
var name = parts[0].Trim();
760764
var value = parts[1].Trim();
761-
_allOptions.Add(name, Uri.UnescapeDataString(value));
765+
// Should not decode authmechanismproperties before splitting by separator.
766+
if (!string.Equals(name, "authmechanismproperties", StringComparison.OrdinalIgnoreCase))
767+
{
768+
value = Uri.UnescapeDataString(value);
769+
}
770+
771+
_allOptions.Add(name, value);
762772
ParseOption(name, value);
763773
}
764774
}
@@ -902,12 +912,6 @@ string ProtectConnectionString(string connectionString)
902912

903913
private void ParseOption(string name, string value)
904914
{
905-
// Should not decode authmechanismproperties before splitting by separator.
906-
if (!string.Equals(name, "authmechanismproperties", StringComparison.OrdinalIgnoreCase))
907-
{
908-
value = Uri.UnescapeDataString(value);
909-
}
910-
911915
switch (name.ToLowerInvariant())
912916
{
913917
case "appname":

0 commit comments

Comments
 (0)