From: Nick Mathewson Date: Tue, 11 Feb 2020 13:47:19 +0000 (-0500) Subject: Merge branch 'ticket32362_squashed' X-Git-Tag: tor-0.4.5.0-alpha-dev~199 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=384a771fccb0b0ab8b95122815b33ef26bf042e8;p=thirdparty%2Ftor.git Merge branch 'ticket32362_squashed' --- 384a771fccb0b0ab8b95122815b33ef26bf042e8 diff --cc src/lib/net/inaddr.c index 0d20d88901,7ae376b119..d50ac2440c --- a/src/lib/net/inaddr.c +++ b/src/lib/net/inaddr.c @@@ -37,10 -39,29 +39,29 @@@ int tor_inet_aton(const char *str, struct in_addr *addr) { - unsigned a,b,c,d; + unsigned a, b, c, d; char more; + bool is_octal = false; + smartlist_t *sl = NULL; + if (tor_sscanf(str, "%3u.%3u.%3u.%3u%c", &a, &b, &c, &d, &more) != 4) return 0; + + /* Parse the octets and check them for leading zeros. */ + sl = smartlist_new(); + smartlist_split_string(sl, str, ".", 0, 0); + SMARTLIST_FOREACH(sl, const char *, octet, { + is_octal = (strlen(octet) > 1 && octet[0] == '0'); + if (is_octal) { + break; + } + }); + SMARTLIST_FOREACH(sl, char *, octet, tor_free(octet)); + smartlist_free(sl); + + if (is_octal) + return 0; + if (a > 255) return 0; if (b > 255) return 0; if (c > 255) return 0;