| |
@@ -0,0 +1,97 @@
|
| |
+ Bug: http://bugs.torproject.org/20871
|
| |
+ Origin: upstream, https://gitweb.torproject.org/torsocks.git/commit/?h=maint-2.2.x&id=15465aa7ace1d5e6dbb58e7adf37933b48e20250
|
| |
+ From: David Goulet <dgoulet@ev0ke.net>
|
| |
+ Date: Fri, 24 Feb 2017 11:02:13 -0500
|
| |
+ Subject: Fix check_addr() to return either 0 or 1
|
| |
+
|
| |
+ This function is used by utils_is_address_ipv4/6 and has to return 0 on
|
| |
+ error or 1 on success.
|
| |
+
|
| |
+ Fixes #20871
|
| |
+
|
| |
+ Signed-off-by: David Goulet <dgoulet@ev0ke.net>
|
| |
+ ---
|
| |
+ src/common/utils.c | 11 ++++++-----
|
| |
+ tests/unit/test_config-file.c | 4 ++--
|
| |
+ tests/unit/test_utils.c | 8 ++++----
|
| |
+ 3 files changed, 12 insertions(+), 11 deletions(-)
|
| |
+
|
| |
+ diff --git a/src/common/utils.c b/src/common/utils.c
|
| |
+ index 82479af..8fe9c6e 100644
|
| |
+ --- a/src/common/utils.c
|
| |
+ +++ b/src/common/utils.c
|
| |
+ @@ -45,8 +45,8 @@ static const char *localhost_names_v6[] = {
|
| |
+ };
|
| |
+
|
| |
+ /*
|
| |
+ - * Return 1 if the given IP belongs in the af domain else return a negative
|
| |
+ - * value.
|
| |
+ + * Return 1 if the given IP belongs in the af domain else return 0 if the
|
| |
+ + * given ip is not a valid address or the af value is unknown.
|
| |
+ */
|
| |
+ static int check_addr(const char *ip, int af)
|
| |
+ {
|
| |
+ @@ -56,9 +56,10 @@ static int check_addr(const char *ip, int af)
|
| |
+ assert(ip);
|
| |
+
|
| |
+ ret = inet_pton(af, ip, buf);
|
| |
+ - if (ret != 1) {
|
| |
+ - ret = -1;
|
| |
+ - }
|
| |
+ + if (ret == -1) {
|
| |
+ + /* Possible if the af value is unknown to inet_pton. */
|
| |
+ + ret = 0;
|
| |
+ + }
|
| |
+
|
| |
+ return ret;
|
| |
+ }
|
| |
+ diff --git a/tests/unit/test_config-file.c b/tests/unit/test_config-file.c
|
| |
+ index 59e3115..b48094c 100644
|
| |
+ --- a/tests/unit/test_config-file.c
|
| |
+ +++ b/tests/unit/test_config-file.c
|
| |
+ @@ -104,13 +104,13 @@ static void test_config_file_read_invalid_values(void)
|
| |
+
|
| |
+ memset(&config, 0x0, sizeof(config));
|
| |
+ ret = config_file_read(fixture("config4"), &config);
|
| |
+ - ok(ret == -1 &&
|
| |
+ + ok(ret == 0 &&
|
| |
+ config.conf_file.tor_address == NULL,
|
| |
+ "TorAddress invalid IPv4 returns -1");
|
| |
+
|
| |
+ memset(&config, 0x0, sizeof(config));
|
| |
+ ret = config_file_read(fixture("config5"), &config);
|
| |
+ - ok(ret == -1 &&
|
| |
+ + ok(ret == 0 &&
|
| |
+ config.conf_file.tor_address == NULL,
|
| |
+ "TorAddress invalid IPv6 returns -1");
|
| |
+
|
| |
+ diff --git a/tests/unit/test_utils.c b/tests/unit/test_utils.c
|
| |
+ index dc5b0ca..95469d8 100644
|
| |
+ --- a/tests/unit/test_utils.c
|
| |
+ +++ b/tests/unit/test_utils.c
|
| |
+ @@ -36,10 +36,10 @@ static void test_is_address_ipv4(void)
|
| |
+ ok(ret == 1, "Valid IPv4 address");
|
| |
+
|
| |
+ ret = utils_is_address_ipv4("127.0.0.256");
|
| |
+ - ok(ret == -1, "Invalid IPv4 address");
|
| |
+ + ok(ret == 0, "Invalid IPv4 address");
|
| |
+
|
| |
+ ret = utils_is_address_ipv4("::1");
|
| |
+ - ok(ret == -1, "Invalid IPv4 address when IPv6");
|
| |
+ + ok(ret == 0, "Invalid IPv4 address when IPv6");
|
| |
+ }
|
| |
+
|
| |
+ static void test_is_address_ipv6(void)
|
| |
+ @@ -55,10 +55,10 @@ static void test_is_address_ipv6(void)
|
| |
+ ok(ret == 1, "Valid IPv6 address");
|
| |
+
|
| |
+ ret = utils_is_address_ipv6("2001:DB8:0:0:8:800:200C:G");
|
| |
+ - ok(ret == -1, "Invalid IPv6 address");
|
| |
+ + ok(ret == 0, "Invalid IPv6 address");
|
| |
+
|
| |
+ ret = utils_is_address_ipv6("192.168.0.1");
|
| |
+ - ok(ret == -1, "Invalid IPv6 address when IPv4");
|
| |
+ + ok(ret == 0, "Invalid IPv6 address when IPv4");
|
| |
+ }
|
| |
+
|
| |
+ static void test_localhost_resolve(void)
|
| |
This also includes the cleanup from vascom