mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
2002-11-14 Paul Eggert <eggert@twionsun.com>
* resolv/nss_dns/dns-network.c (getanswer_r): Check for buffer overflow when skipping the question part and when unpacking aliases.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2002-11-14 Paul Eggert <eggert@twionsun.com>
|
||||||
|
|
||||||
|
* resolv/nss_dns/dns-network.c (getanswer_r): Check for buffer
|
||||||
|
overflow when skipping the question part and when unpacking
|
||||||
|
aliases.
|
||||||
|
|
||||||
2002-11-15 Roland McGrath <roland@redhat.com>
|
2002-11-15 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
* math/Makefile (libm-calls): Remove s_copysign, s_isinf, s_isnan,
|
* math/Makefile (libm-calls): Remove s_copysign, s_isinf, s_isnan,
|
||||||
|
@ -283,7 +283,15 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
|
|||||||
|
|
||||||
/* Skip the question part. */
|
/* Skip the question part. */
|
||||||
while (question_count-- > 0)
|
while (question_count-- > 0)
|
||||||
cp += __dn_skipname (cp, end_of_message) + QFIXEDSZ;
|
{
|
||||||
|
int n = __dn_skipname (cp, end_of_message);
|
||||||
|
if (n < 0 || end_of_message - (cp + n) < QFIXEDSZ)
|
||||||
|
{
|
||||||
|
__set_h_errno (NO_RECOVERY);
|
||||||
|
return NSS_STATUS_UNAVAIL;
|
||||||
|
}
|
||||||
|
cp += n + QFIXEDSZ;
|
||||||
|
}
|
||||||
|
|
||||||
alias_pointer = result->n_aliases = &net_data->aliases[0];
|
alias_pointer = result->n_aliases = &net_data->aliases[0];
|
||||||
*alias_pointer = NULL;
|
*alias_pointer = NULL;
|
||||||
@ -344,12 +352,15 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
|
|||||||
return NSS_STATUS_UNAVAIL;
|
return NSS_STATUS_UNAVAIL;
|
||||||
}
|
}
|
||||||
cp += n;
|
cp += n;
|
||||||
*alias_pointer++ = bp;
|
if (alias_pointer + 2 < &net_data->aliases[MAX_NR_ALIASES])
|
||||||
n = strlen (bp) + 1;
|
{
|
||||||
bp += n;
|
*alias_pointer++ = bp;
|
||||||
linebuflen -= n;
|
n = strlen (bp) + 1;
|
||||||
result->n_addrtype = class == C_IN ? AF_INET : AF_UNSPEC;
|
bp += n;
|
||||||
++have_answer;
|
linebuflen -= n;
|
||||||
|
result->n_addrtype = class == C_IN ? AF_INET : AF_UNSPEC;
|
||||||
|
++have_answer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user