Commit edc56143 authored by Anders Sundman's avatar Anders Sundman
Browse files

Minor tor_inet_pton bug fixes

In particular:
* Disallow "0x10::"
* Don't blow up on ":"
* Disallow "::10000"
parent 53dac6df
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -1733,14 +1733,19 @@ tor_inet_pton(int af, const char *src, void *dst)
        return 0;
      if (TOR_ISXDIGIT(*src)) {
        char *next;
        int len;
        long r = strtol(src, &next, 16);
        if (next > 4+src)
          return 0;
        if (next == src)
          return 0;
        if (r<0 || r>65536)
        tor_assert(next != NULL);
        tor_assert(next != src);

        len = *next == '\0' ? eow - src : next - src;
        if (len > 4)
          return 0;
        if (len > 1 && !TOR_ISXDIGIT(src[1]))
          return 0; /* 0x is not valid */

        tor_assert(r >= 0);
        tor_assert(r < 65536);
        words[i++] = (uint16_t)r;
        setWords++;
        src = next;
@@ -1750,7 +1755,8 @@ tor_inet_pton(int af, const char *src, void *dst)
      } else if (*src == ':' && i > 0 && gapPos == -1) {
        gapPos = i;
        ++src;
      } else if (*src == ':' && i == 0 && src[1] == ':' && gapPos==-1) {
      } else if (*src == ':' && i == 0 && src+1 < eow && src[1] == ':' &&
                 gapPos == -1) {
        gapPos = i;
        src += 2;
      } else {