Fix validation of overly-long IPv6 addresses.
authorTom Lane <[email protected]>
Thu, 16 Jun 2016 21:16:32 +0000 (17:16 -0400)
committerTom Lane <[email protected]>
Thu, 16 Jun 2016 21:16:32 +0000 (17:16 -0400)
The inet/cidr types sometimes failed to reject IPv6 inputs with too many
colon-separated fields, instead translating them to '::/0'.  This is the
result of a thinko in the original ISC code that seems to be as yet
unreported elsewhere.  Per bug #14198 from Stefan Kaltenbrunner.

Report: <20160616182222[email protected]>

src/backend/utils/adt/inet_net_pton.c

index 9064eaf64b0645b58ffc47c11b2386078213bf22..b8fa7d2bccf99d1d8d59f3e974f484d5429ebebd 100644 (file)
@@ -496,7 +496,7 @@ inet_cidr_pton_ipv6(const char *src, u_char *dst, size_t size)
            else if (*src == '\0')
                goto enoent;
            if (tp + NS_INT16SZ > endp)
-               return (0);
+               goto enoent;
            *tp++ = (u_char) (val >> 8) & 0xff;
            *tp++ = (u_char) val & 0xff;
            saw_xdigit = 0;