Loading changes/bug22789 0 → 100644 +6 −0 Original line number Diff line number Diff line o Major bugfixes (openbsd, denial-of-service): - Avoid an assertion failure bug affecting our implementation of inet_pton(AF_INET6) on certain OpenBSD systems whose strtol() handling of "0xfoo" differs from what we had expected. Fixes bug 22789; bugfix on 0.2.3.8-alpha. src/common/compat.c +6 −2 Original line number Diff line number Diff line Loading @@ -2579,8 +2579,12 @@ tor_inet_pton(int af, const char *src, void *dst) char *next; ssize_t len; long r = strtol(src, &next, 16); tor_assert(next != NULL); tor_assert(next != src); if (next == NULL || next == src) { /* The 'next == src' error case can happen on versions of openbsd * where treats "0xfoo" as an error, rather than as "0" followed by * "xfoo". */ return 0; } len = *next == '\0' ? eow - src : next - src; if (len > 4) Loading src/test/test_addr.c +9 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,15 @@ test_addr_ip6_helpers(void *arg) test_pton6_bad("1.2.3.4"); test_pton6_bad(":1.2.3.4"); test_pton6_bad(".2.3.4"); /* Regression tests for 22789. */ test_pton6_bad("0xfoo"); test_pton6_bad("0x88"); test_pton6_bad("0xyxxy"); test_pton6_bad("0XFOO"); test_pton6_bad("0X88"); test_pton6_bad("0XYXXY"); test_pton6_bad("0x"); test_pton6_bad("0X"); /* test internal checking */ test_external_ip("fbff:ffff::2:7", 0); Loading Loading
changes/bug22789 0 → 100644 +6 −0 Original line number Diff line number Diff line o Major bugfixes (openbsd, denial-of-service): - Avoid an assertion failure bug affecting our implementation of inet_pton(AF_INET6) on certain OpenBSD systems whose strtol() handling of "0xfoo" differs from what we had expected. Fixes bug 22789; bugfix on 0.2.3.8-alpha.
src/common/compat.c +6 −2 Original line number Diff line number Diff line Loading @@ -2579,8 +2579,12 @@ tor_inet_pton(int af, const char *src, void *dst) char *next; ssize_t len; long r = strtol(src, &next, 16); tor_assert(next != NULL); tor_assert(next != src); if (next == NULL || next == src) { /* The 'next == src' error case can happen on versions of openbsd * where treats "0xfoo" as an error, rather than as "0" followed by * "xfoo". */ return 0; } len = *next == '\0' ? eow - src : next - src; if (len > 4) Loading
src/test/test_addr.c +9 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,15 @@ test_addr_ip6_helpers(void *arg) test_pton6_bad("1.2.3.4"); test_pton6_bad(":1.2.3.4"); test_pton6_bad(".2.3.4"); /* Regression tests for 22789. */ test_pton6_bad("0xfoo"); test_pton6_bad("0x88"); test_pton6_bad("0xyxxy"); test_pton6_bad("0XFOO"); test_pton6_bad("0X88"); test_pton6_bad("0XYXXY"); test_pton6_bad("0x"); test_pton6_bad("0X"); /* test internal checking */ test_external_ip("fbff:ffff::2:7", 0); Loading