From: Tom Lane Date: Mon, 1 Dec 2003 18:50:19 +0000 (+0000) Subject: netmask() and hostmask() functions should return maximum-length masklen, X-Git-Tag: REL8_0_0BETA1~1601 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5336a892f18614e78f12a840c89073ffed2c144;p=postgresql netmask() and hostmask() functions should return maximum-length masklen, per gripe from Joe Sunday. --- diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 6cb1d9f687..acad79dec6 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -1,7 +1,7 @@ /* * PostgreSQL type definitions for the INET and CIDR types. * - * $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.48 2003/11/29 19:51:59 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.49 2003/12/01 18:50:19 tgl Exp $ * * Jon Postel RIP 16 Oct 1998 */ @@ -315,8 +315,8 @@ inet_set_masklen(PG_FUNCTION_ARGS) errmsg("invalid mask length: %d", bits))); /* clone the original data */ - dst = (inet *) palloc(VARHDRSZ + sizeof(inet_struct)); - memcpy(dst, src, VARHDRSZ + sizeof(inet_struct)); + dst = (inet *) palloc(VARSIZE(src)); + memcpy(dst, src, VARSIZE(src)); ip_bits(dst) = bits; @@ -658,7 +658,6 @@ network_network(PG_FUNCTION_ARGS) inet *dst; int byte; int bits; - int maxbytes; unsigned char mask; unsigned char *a, *b; @@ -666,11 +665,6 @@ network_network(PG_FUNCTION_ARGS) /* make sure any unused bits are zeroed */ dst = (inet *) palloc0(VARHDRSZ + sizeof(inet_struct)); - if (ip_family(ip) == PGSQL_AF_INET) - maxbytes = 4; - else - maxbytes = 16; - bits = ip_bits(ip); a = ip_addr(ip); b = ip_addr(dst); @@ -710,18 +704,12 @@ network_netmask(PG_FUNCTION_ARGS) inet *dst; int byte; int bits; - int maxbytes; unsigned char mask; unsigned char *b; /* make sure any unused bits are zeroed */ dst = (inet *) palloc0(VARHDRSZ + sizeof(inet_struct)); - if (ip_family(ip) == PGSQL_AF_INET) - maxbytes = 4; - else - maxbytes = 16; - bits = ip_bits(ip); b = ip_addr(dst); @@ -744,7 +732,7 @@ network_netmask(PG_FUNCTION_ARGS) } ip_family(dst) = ip_family(ip); - ip_bits(dst) = ip_bits(ip); + ip_bits(dst) = ip_maxbits(ip); ip_type(dst) = 0; VARATT_SIZEP(dst) = VARHDRSZ + ((char *) ip_addr(dst) - (char *) VARDATA(dst)) @@ -794,7 +782,7 @@ network_hostmask(PG_FUNCTION_ARGS) } ip_family(dst) = ip_family(ip); - ip_bits(dst) = ip_bits(ip); + ip_bits(dst) = ip_maxbits(ip); ip_type(dst) = 0; VARATT_SIZEP(dst) = VARHDRSZ + ((char *) ip_addr(dst) - (char *) VARDATA(dst))