Commit 4c56f326 authored by Tom Lane's avatar Tom Lane

Fix validation of overly-long IPv6 addresses.

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.5798.959@wrigleys.postgresql.org>
parent bfb93742
...@@ -496,7 +496,7 @@ inet_cidr_pton_ipv6(const char *src, u_char *dst, size_t size) ...@@ -496,7 +496,7 @@ inet_cidr_pton_ipv6(const char *src, u_char *dst, size_t size)
else if (*src == '\0') else if (*src == '\0')
goto enoent; goto enoent;
if (tp + NS_INT16SZ > endp) if (tp + NS_INT16SZ > endp)
return (0); goto enoent;
*tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) (val >> 8) & 0xff;
*tp++ = (u_char) val & 0xff; *tp++ = (u_char) val & 0xff;
saw_xdigit = 0; saw_xdigit = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment