diff options
author | Stacey Marshall <Stacey.Marshall@Sun.COM> | 2009-04-23 11:18:37 +0100 |
---|---|---|
committer | Stacey Marshall <Stacey.Marshall@Sun.COM> | 2009-04-23 11:18:37 +0100 |
commit | b07ce584f4e28873b8927d7f83d9d3275a0f3ed2 (patch) | |
tree | 699ccc4725ec4d0d885f077fa32a28a2bfc782b8 | |
parent | ac9468f8dd2abd7271cca0d9e1b15831d367cf9f (diff) | |
download | illumos-joyent-b07ce584f4e28873b8927d7f83d9d3275a0f3ed2.tar.gz |
5085675 libresolv2 can cause apps to core in addrsort()
-rw-r--r-- | usr/src/lib/libresolv2/common/irs/dns_ho.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/usr/src/lib/libresolv2/common/irs/dns_ho.c b/usr/src/lib/libresolv2/common/irs/dns_ho.c index 4d4b830dfe..8de5b5028f 100644 --- a/usr/src/lib/libresolv2/common/irs/dns_ho.c +++ b/usr/src/lib/libresolv2/common/irs/dns_ho.c @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -53,8 +53,6 @@ * SOFTWARE. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* from gethostnamadr.c 8.1 (Berkeley) 6/4/93 */ /* BIND Id: gethnamaddr.c,v 8.15 1996/05/22 04:56:30 vixie Exp $ */ @@ -974,7 +972,7 @@ gethostans(struct irs_ho *this, } if (m == 0) continue; - if (hap < &pvt->h_addr_ptrs[MAXADDRS-1]) + if (hap < &pvt->h_addr_ptrs[MAXADDRS]) hap++; *hap = NULL; bp += m; @@ -996,9 +994,10 @@ gethostans(struct irs_ho *this, *ap = NULL; *hap = NULL; - if (pvt->res->nsort && haveanswer > 1 && qtype == T_A) + if (pvt->res->nsort && hap != pvt->h_addr_ptrs && + qtype == T_A) addrsort(pvt->res, pvt->h_addr_ptrs, - haveanswer); + hap - pvt->h_addr_ptrs); if (pvt->host.h_name == NULL) { n = strlen(qname) + 1; /* for the \0 */ if (n > (ep - bp) || n >= MAXHOSTNAMELEN) @@ -1069,7 +1068,7 @@ add_hostent(struct pvt *pvt, char *bp, char **hap, struct addrinfo *ai) /* Avoid overflows. */ if (bp + addrlen >= &pvt->hostbuf[sizeof pvt->hostbuf]) return(-1); - if (hap >= &pvt->h_addr_ptrs[MAXADDRS-1]) + if (hap >= &pvt->h_addr_ptrs[MAXADDRS]) return(0); /* fail, but not treat it as an error. */ /* Suppress duplicates. */ |