mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 03:10:05 +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>
|
2007-10-06 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* nscd/nscd_helper.c (__nscd_cache_search): Prevent endless loops.
|
||||||
|
|
||||||
[BZ #4407]
|
[BZ #4407]
|
||||||
* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Fix *signgamp for -0.0.
|
* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Fix *signgamp for -0.0.
|
||||||
* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
|
* 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;
|
unsigned long int hash = __nis_hash (key, keylen) % mapped->head->module;
|
||||||
size_t datasize = mapped->datasize;
|
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)
|
while (work != ENDREF && work + sizeof (struct hashentry) <= datasize)
|
||||||
{
|
{
|
||||||
struct hashentry *here = (struct hashentry *) (mapped->data + work);
|
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;
|
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;
|
return NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user