summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStacey Marshall <Stacey.Marshall@Sun.COM>2009-04-23 11:18:37 +0100
committerStacey Marshall <Stacey.Marshall@Sun.COM>2009-04-23 11:18:37 +0100
commitb07ce584f4e28873b8927d7f83d9d3275a0f3ed2 (patch)
tree699ccc4725ec4d0d885f077fa32a28a2bfc782b8
parentac9468f8dd2abd7271cca0d9e1b15831d367cf9f (diff)
downloadillumos-joyent-b07ce584f4e28873b8927d7f83d9d3275a0f3ed2.tar.gz
5085675 libresolv2 can cause apps to core in addrsort()
-rw-r--r--usr/src/lib/libresolv2/common/irs/dns_ho.c13
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. */