Fix hashtable size calculation when database has exactly one record

The hash function needs a hashtable of at least size 3 or greater.
This commit is contained in:
Siddhesh Poyarekar 2012-11-28 06:45:50 +05:30
parent de2fd463b1
commit 0817d63dd1
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2012-11-28 Siddhesh Poyarekar <siddhesh@redhat.com>
Carlos O'Donell <carlos_odonell@mentor.com>
* nss/makedb.c (is_prime): Assert that input is odd and greater
than 4. Note that fact in a comment too.
(next_prime): Add 4 to input.
2012-11-27 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #11741]

View File

@ -591,13 +591,16 @@ copy_valstr (const void *nodep, const VISIT which, const int depth)
}
/* Determine if the candidate is prime by using a modified trial division
algorithm. The candidate must be both odd and greater than 4. */
static int
is_prime (size_t candidate)
{
/* No even number and none less than 10 will be passed here. */
size_t divn = 3;
size_t sq = divn * divn;
assert (candidate > 4 && candidate % 2 != 0);
while (sq < candidate && candidate % divn != 0)
{
++divn;
@ -612,8 +615,8 @@ is_prime (size_t candidate)
static size_t
next_prime (size_t seed)
{
/* Make it definitely odd. */
seed |= 1;
/* Make sure that we're always greater than 4. */
seed = (seed + 4) | 1;
while (!is_prime (seed))
seed += 2;