mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
* nscd/nscd_helper.c (__nscd_cache_search): Prevent endless loops.
This commit is contained in:
parent
c039eedd66
commit
8c7661bcd3
@ -1,5 +1,7 @@
|
||||
2007-10-06 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (__nscd_cache_search): Prevent endless loops.
|
||||
|
||||
[BZ #4407]
|
||||
* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Fix *signgamp for -0.0.
|
||||
* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
|
||||
|
@ -416,7 +416,8 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
unsigned long int hash = __nis_hash (key, keylen) % mapped->head->module;
|
||||
size_t datasize = mapped->datasize;
|
||||
|
||||
ref_t work = mapped->head->array[hash];
|
||||
ref_t first = mapped->head->array[hash];
|
||||
ref_t work = first;
|
||||
while (work != ENDREF && work + sizeof (struct hashentry) <= datasize)
|
||||
{
|
||||
struct hashentry *here = (struct hashentry *) (mapped->data + work);
|
||||
@ -454,6 +455,10 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
}
|
||||
|
||||
work = here->next;
|
||||
/* Prevent endless loops. This should never happen but perhaps
|
||||
the database got corrupted, accidentally or deliberately. */
|
||||
if (work == first)
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user