diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | nss/makedb.c | 9 |
2 files changed, 13 insertions, 3 deletions
@@ -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] diff --git a/nss/makedb.c b/nss/makedb.c index 8d7d027..e372f5d 100644 --- a/nss/makedb.c +++ b/nss/makedb.c @@ -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; |