Skip to content

Commit

Permalink
Improve port parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
nopara73 committed Jul 21, 2019
1 parent 714efc0 commit bd6012b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 35 deletions.
11 changes: 7 additions & 4 deletions WalletWasabi.Tests/ParserTests.cs
Expand Up @@ -82,8 +82,11 @@ public void EndPointParserTests(string host)
// Default port is used.
foreach (var inputString in inputsWithoutPorts)
{
var success = EndPointParser.TryParse(inputString, 5000, out EndPoint ep);
AssertEndPointParserOutputs(success, ep, host, 5000);
foreach (var defaultPort in validPorts)
{
var success = EndPointParser.TryParse(inputString, defaultPort, out EndPoint ep);
AssertEndPointParserOutputs(success, ep, host, defaultPort);
}
}

// Default port is not used.
Expand All @@ -99,12 +102,12 @@ public void EndPointParserTests(string host)
Assert.False(EndPointParser.TryParse(inputString, -1, out EndPoint ep));
}

// Defaultport corrects invalid inputs.
// Defaultport doesn't correct invalid port input.
foreach (var inputString in inputsWithInvalidPorts)
{
foreach (var defaultPort in validPorts)
{
Assert.True(EndPointParser.TryParse(inputString, defaultPort, out EndPoint ep));
Assert.False(EndPointParser.TryParse(inputString, defaultPort, out EndPoint ep));
}
}

Expand Down
35 changes: 4 additions & 31 deletions WalletWasabi/Helpers/EndPointParser.cs
Expand Up @@ -53,7 +53,7 @@ public static bool TryParse(string endPointString, int defaultPort, out EndPoint
endPointString = endPointString.TrimEnd(':', '/');
var parts = endPointString.Split(':', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim().TrimEnd('/').TrimEnd()).ToArray();

var isDefaultPortInvalid = !ushort.TryParse(defaultPort.ToString(), out _);
var isDefaultPortInvalid = !ushort.TryParse(defaultPort.ToString(), out ushort dp) || dp < IPEndPoint.MinPort || dp > IPEndPoint.MaxPort;
int port;
if (parts.Length == 0)
{
Expand All @@ -73,20 +73,13 @@ public static bool TryParse(string endPointString, int defaultPort, out EndPoint
else if (parts.Length == 2)
{
var portString = parts[1];
if (ushort.TryParse(portString, out ushort p))
if (ushort.TryParse(portString, out ushort p) && p >= IPEndPoint.MinPort && p <= IPEndPoint.MaxPort)
{
port = p;
}
else
{
if (isDefaultPortInvalid)
{
return false;
}
else
{
port = defaultPort;
}
return false;
}
}
else
Expand All @@ -100,33 +93,13 @@ public static bool TryParse(string endPointString, int defaultPort, out EndPoint
host = IPAddress.Loopback.ToString();
}

bool isPortInvalid = port < IPEndPoint.MinPort || port > IPEndPoint.MaxPort || !ushort.TryParse(port.ToString(), out _);
if (isPortInvalid)
{
if (isDefaultPortInvalid)
{
return false;
}
else
{
port = defaultPort;
}
}

if (IPAddress.TryParse(host, out IPAddress addr))
{
endPoint = new IPEndPoint(addr, port);
}
else
{
try
{
endPoint = new DnsEndPoint(host, port);
}
catch
{
return false;
}
endPoint = new DnsEndPoint(host, port);
}

return true;
Expand Down

0 comments on commit bd6012b

Please sign in to comment.