diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-01-04 19:47:17 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-01-04 19:47:17 +0000 |
commit | 9c94b428d9f30f1c5a493856cfea293c634a3c9f (patch) | |
tree | a92189d7d7cafee62249609f8e8d83844adc1e84 /src/common | |
parent | 360a059948e47b69bd86caf3b1de698954093df8 (diff) | |
download | tor-9c94b428d9f30f1c5a493856cfea293c634a3c9f.tar tor-9c94b428d9f30f1c5a493856cfea293c634a3c9f.tar.gz |
Fix the oldest bug in a while: stop accepting 1.2.3 as a valid IPv4 address on any platform.
svn:r17887
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/compat.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/common/compat.c b/src/common/compat.c index c54342e56..904d5308c 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -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 |