]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix the oldest bug in a while: stop accepting 1.2.3 as a valid IPv4 address on any...
authorNick Mathewson <nickm@torproject.org>
Sun, 4 Jan 2009 19:47:17 +0000 (19:47 +0000)
committerNick Mathewson <nickm@torproject.org>
Sun, 4 Jan 2009 19:47:17 +0000 (19:47 +0000)
svn:r17887

ChangeLog
src/common/compat.c
src/or/test.c

index 9ba226cb7373eefe5b060f2188f2c6a5d41950a7..d4b808155535595f3719370921cd49691ba5407c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,8 @@ Changes in version 0.2.1.10-alpha - 2009-01-??
       0.2.1.9-alpha.
     - Do not remove routers as too old if we do not have any consensus
       document.  Bugfix on 0.2.0.7-alpha.
+    - Do not accept incomplete ipv4 addresses (like 192.168.0) as valid.
+      Spec conformance issue.  Bugfix on Tor 0.0.2pre27.
 
   o Deprecated and removed features:
     - The old "tor --version --version" command, which would spit out the
index c54342e56f608696c7f0848524358e3e17cd8114..904d5308cb606dc78dc9a5a51195676287c93426 100644 (file)
@@ -1207,8 +1207,20 @@ get_user_homedir(const char *username)
  * but works on Windows and Solaris.)
  */
 int
-tor_inet_aton(const char *c, struct in_addr* addr)
+tor_inet_aton(const char *str, struct in_addr* addr)
 {
+  int a,b,c,d;
+  char more;
+  if (sscanf(str, "%d.%d.%d.%d%c", &a,&b,&c,&d,&more) != 4)
+    return 0;
+  if (a < 0 || a > 255) return 0;
+  if (b < 0 || b > 255) return 0;
+  if (c < 0 || c > 255) return 0;
+  if (d < 0 || d > 255) return 0;
+  addr->s_addr = htonl((a<<24) | (b<<16) | (c<<8) | d);
+  return 1;
+
+#if 0
 #ifdef HAVE_INET_ATON
   return inet_aton(c, addr);
 #else
@@ -1225,6 +1237,7 @@ tor_inet_aton(const char *c, struct in_addr* addr)
   addr->s_addr = r;
   return 1;
 #endif
+#endif
 }
 
 /** Given <b>af</b>==AF_INET and <b>src</b> a struct in_addr, or
index e3f92f6d4f65a3009ebc6d926055c83889daa18a..cf3384026436b2ab88da336acaa76c7de142564d 100644 (file)
@@ -1699,7 +1699,7 @@ test_util_ip6_helpers(void)
   test_eq(i, -1);
   i = tor_addr_parse_reverse_lookup_name(&t1, "32.1.1.in-addr.arpa",
                                          AF_UNSPEC, 0);
-  /* test_eq(i, -1); XXXX021 Apparently '32.1.1' is a valid aton address. */
+  test_eq(i, -1);
   i = tor_addr_parse_reverse_lookup_name(&t1, ".in-addr.arpa",
                                          AF_UNSPEC, 0);
   test_eq(i, -1);