Commit 32c0066e authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge branch 'maint-0.2.8' into maint-0.2.9

parents bb97f680 5ff0f1ab
Loading
Loading
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.
+6 −2
Original line number Diff line number Diff line
@@ -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)
+9 −0
Original line number Diff line number Diff line
@@ -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);