aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-02-13 17:36:45 +0100
committerAndreas Schneider <asn@cryptomilk.org>2011-02-13 17:36:45 +0100
commiteea1df3574db36036aa68c098bc29996a241808d (patch)
tree55d3a0cb6bf6c5a0f8832ba09fd1052012dad683
parent9baa491b0b2cbc0cb9269dc4052a29bee494e244 (diff)
downloadlibssh-eea1df3574db36036aa68c098bc29996a241808d.tar.gz
libssh-eea1df3574db36036aa68c098bc29996a241808d.tar.xz
libssh-eea1df3574db36036aa68c098bc29996a241808d.zip
misc: Fixed ssh_is_ipaddr_v4() on Windows.
-rw-r--r--src/misc.c5
-rw-r--r--tests/unittests/torture_isipaddr.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/src/misc.c b/src/misc.c
index 857600d5..3b4b5059 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -158,6 +158,11 @@ int ssh_is_ipaddr_v4(const char *str) {
int sslen = sizeof(ss);
int rc = SOCKET_ERROR;
+ /* WSAStringToAddressA thinks that 0.0.0 is a valid IP */
+ if (strlen < 7) {
+ return 0;
+ }
+
rc = WSAStringToAddressA((LPSTR) str,
AF_INET,
NULL,
diff --git a/tests/unittests/torture_isipaddr.c b/tests/unittests/torture_isipaddr.c
index 1d2bab5a..eacc06ef 100644
--- a/tests/unittests/torture_isipaddr.c
+++ b/tests/unittests/torture_isipaddr.c
@@ -23,6 +23,7 @@ static void torture_ssh_is_ipaddr(void **state) {
assert_int_equal(ssh_is_ipaddr("fe80:0000:0000:0000:0202:b3ff:fe1e:8329"),1);
assert_int_equal(ssh_is_ipaddr("fe80:0:0:0:202:b3ff:fe1e:8329"),1);
assert_int_equal(ssh_is_ipaddr("fe80::202:b3ff:fe1e:8329"),1);
+ assert_int_equal(ssh_is_ipaddr("::1"),1);
assert_int_equal(ssh_is_ipaddr("::ffff:192.0.2.128"),1);
@@ -32,15 +33,13 @@ static void torture_ssh_is_ipaddr(void **state) {
assert_int_equal(ssh_is_ipaddr("0a.0.0.0.0"),0);
assert_int_equal(ssh_is_ipaddr(""),0);
assert_int_equal(ssh_is_ipaddr("0.0.0."),0);
-#ifndef _WIN32
- /* These are valid ip address on Windows */
- assert_int_equal(ssh_is_ipaddr("0.0.0"),0);
assert_int_equal(ssh_is_ipaddr("0.0"),0);
assert_int_equal(ssh_is_ipaddr("0"),0);
-#endif
assert_int_equal(ssh_is_ipaddr("2001:0db8:85a3:0000:0000:8a2e:0370:7334:1002"), 0);
assert_int_equal(ssh_is_ipaddr("fe80:x:202:b3ff:fe1e:8329"), 0);
+ assert_int_equal(ssh_is_ipaddr("fe80:x:202:b3ff:fe1e:8329"), 0);
+ assert_int_equal(ssh_is_ipaddr(":1"), 0);
}
int torture_run_tests(void) {