From 7c39e1aa9ff777b3b553553c3ce8cdce7ca3bb69 Mon Sep 17 00:00:00 2001 From: Aspirin Geyer Date: Sun, 19 Aug 2018 12:20:17 +0800 Subject: [PATCH] Use `ushort` for ports, instead of `int`. --- shadowsocks-csharp/Model/Server.cs | 10 +++++----- shadowsocks-csharp/View/ConfigForm.cs | 4 ++-- test/ServerTest.cs | 19 +++++++++++++++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/shadowsocks-csharp/Model/Server.cs b/shadowsocks-csharp/Model/Server.cs index 81fa6773d15..d1e353df79b 100755 --- a/shadowsocks-csharp/Model/Server.cs +++ b/shadowsocks-csharp/Model/Server.cs @@ -107,8 +107,8 @@ public class Server { public string id; public string server; - public int server_port; - public int server_udp_port; + public ushort server_port; + public ushort server_udp_port; public string password; public string method; public string protocol; @@ -382,7 +382,7 @@ public void ServerFromSSR(string ssrURL, string force_group) throw new FormatException(); server = match.Groups[1].Value; - server_port = int.Parse(match.Groups[2].Value); + server_port = ushort.Parse(match.Groups[2].Value); protocol = match.Groups[3].Value.Length == 0 ? "origin" : match.Groups[3].Value; protocol = protocol.Replace("_compatible", ""); method = match.Groups[4].Value; @@ -414,7 +414,7 @@ public void ServerFromSSR(string ssrURL, string force_group) } if (params_dict.ContainsKey("udpport")) { - server_udp_port = int.Parse(params_dict["udpport"]); + server_udp_port = ushort.Parse(params_dict["udpport"]); } if (!String.IsNullOrEmpty(force_group)) group = force_group; @@ -437,7 +437,7 @@ public void ServerFromSS(string ssURL, string force_group) method = match.Groups["method"].Value; password = match.Groups["password"].Value; server = match.Groups["hostname"].Value; - server_port = int.Parse(match.Groups["port"].Value); + server_port = ushort.Parse(match.Groups["port"].Value); if (!String.IsNullOrEmpty(force_group)) group = force_group; else diff --git a/shadowsocks-csharp/View/ConfigForm.cs b/shadowsocks-csharp/View/ConfigForm.cs index 060317aeea3..5072d34f1fc 100755 --- a/shadowsocks-csharp/View/ConfigForm.cs +++ b/shadowsocks-csharp/View/ConfigForm.cs @@ -208,8 +208,8 @@ private int SaveOldSelectedServer() Server server = new Server { server = IPTextBox.Text.Trim(), - server_port = Convert.ToInt32(NumServerPort.Value), - server_udp_port = Convert.ToInt32(NumUDPPort.Value), + server_port = Convert.ToUInt16(NumServerPort.Value), + server_udp_port = Convert.ToUInt16(NumUDPPort.Value), password = PasswordTextBox.Text, method = EncryptionSelect.Text, protocol = TCPProtocolComboBox.Text, diff --git a/test/ServerTest.cs b/test/ServerTest.cs index 33440282efe..99da177a723 100644 --- a/test/ServerTest.cs +++ b/test/ServerTest.cs @@ -18,7 +18,7 @@ public void TestServerFromSSR() server.ServerFromSSR(nornameCase, ""); Assert.AreEqual(server.server, "127.0.0.1"); - Assert.AreEqual(server.server_port, 1234); + Assert.AreEqual(server.server_port, 1234); Assert.AreEqual(server.protocol, "auth_aes128_md5"); Assert.AreEqual(server.method, "aes-128-cfb"); Assert.AreEqual(server.obfs, "tls1.2_ticket_auth"); @@ -31,7 +31,7 @@ public void TestServerFromSSR() server.ServerFromSSR(normalCaseWithRemark, "firewallAirport"); Assert.AreEqual(server.server, "127.0.0.1"); - Assert.AreEqual(server.server_port, 1234); + Assert.AreEqual(server.server_port, 1234); Assert.AreEqual(server.protocol, "auth_aes128_md5"); Assert.AreEqual(server.method, "aes-128-cfb"); Assert.AreEqual(server.obfs, "tls1.2_ticket_auth"); @@ -57,5 +57,20 @@ public void TestHideServerName() Assert.AreEqual(addrs[key], val); } } + + [TestMethod] + public void TestBadPortNumber() + { + Server server = new Server(); + + string link = "ssr://MTI3LjAuMC4xOjgwOmF1dGhfc2hhMV92NDpjaGFjaGEyMDpodHRwX3NpbXBsZTplaWZnYmVpd3ViZ3IvP29iZnNwYXJhbT0mcHJvdG9wYXJhbT0mcmVtYXJrcz0mZ3JvdXA9JnVkcHBvcnQ9NDY0MzgxMzYmdW90PTQ2MDA3MTI4"; + try { + server.ServerFromSSR(link, ""); + } catch (System.OverflowException e) + { + Console.Write(e.ToString()); + } + + } } }