From acf82eaf270b410e49dfe45fa836f1ba41b62bb6 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 6 May 2006 07:16:35 +0000 Subject: [BZ #2499] 2006-05-06 Ulrich Drepper [BZ #2499] * resolv/res_query.c (__libc_res_nquery): If answerp != NULL, __libc_res_nsend might reallocate the buffer for the answer. In this case we have to reload the HP pointer. --- ChangeLog | 7 +++++++ resolv/res_query.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 067d4fe..3d8a63f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-05-06 Ulrich Drepper + + [BZ #2499] + * resolv/res_query.c (__libc_res_nquery): If answerp != NULL, + __libc_res_nsend might reallocate the buffer for the answer. In + this case we have to reload the HP pointer. + 2006-05-05 Ulrich Drepper * stdio-common/vfscanf.c (memory_error): Remove definition. Add diff --git a/resolv/res_query.c b/resolv/res_query.c index 0feba66..85bad97 100644 --- a/resolv/res_query.c +++ b/resolv/res_query.c @@ -69,6 +69,7 @@ static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93"; static const char rcsid[] = "$BINDId: res_query.c,v 8.20 2000/02/29 05:39:12 vixie Exp $"; #endif /* LIBC_SCCS and not lint */ +#include #include #include #include @@ -151,6 +152,7 @@ __libc_res_nquery(res_state statp, free (buf); return (n); } + assert (answerp == NULL || (void *) *answerp == (void *) answer); n = __libc_res_nsend(statp, buf, n, answer, anslen, answerp); if (use_malloc) free (buf); @@ -163,6 +165,10 @@ __libc_res_nquery(res_state statp, return (n); } + if (answerp != NULL) + /* __libc_res_nsend might have reallocated the buffer. */ + hp = (HEADER *) *answerp; + if (hp->rcode != NOERROR || ntohs(hp->ancount) == 0) { #ifdef DEBUG if (statp->options & RES_DEBUG) -- cgit v1.1