summaryrefslogtreecommitdiffstats
path: root/factor
diff options
context:
space:
mode:
authordrochner <drochner@NetBSD.org>2010-04-22 14:28:48 +0000
committerdrochner <drochner@NetBSD.org>2010-04-22 14:28:48 +0000
commitbe1c32e4fa4b1b23ec06fbba9266e0f67f20913f (patch)
tree27001010dd32f55d302bc7567b252fc61162dde6 /factor
parent0f0fd29bad842d07557dc35b7f338d65a922df7e (diff)
downloadbsdgames-darwin-be1c32e4fa4b1b23ec06fbba9266e0f67f20913f.tar.gz
bsdgames-darwin-be1c32e4fa4b1b23ec06fbba9266e0f67f20913f.tar.zst
bsdgames-darwin-be1c32e4fa4b1b23ec06fbba9266e0f67f20913f.zip
fix an obvious flaw in bounds check: the array of precomputed primes
could be overrun if its last entry (65537) was a factor of the input (this does not affect PR misc/43192 -- the factors are much larger here: 7742394596501*159455563099482401)
Diffstat (limited to 'factor')
-rw-r--r--factor/factor.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/factor/factor.c b/factor/factor.c
index c7913a54..670e8968 100644
--- a/factor/factor.c
+++ b/factor/factor.c
@@ -1,4 +1,4 @@
-/* $NetBSD: factor.c,v 1.19 2009/08/12 05:54:31 dholland Exp $ */
+/* $NetBSD: factor.c,v 1.20 2010/04/22 14:28:48 drochner Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 1993\
#if 0
static char sccsid[] = "@(#)factor.c 8.4 (Berkeley) 5/4/95";
#else
-__RCSID("$NetBSD: factor.c,v 1.19 2009/08/12 05:54:31 dholland Exp $");
+__RCSID("$NetBSD: factor.c,v 1.20 2010/04/22 14:28:48 drochner Exp $");
#endif
#endif /* not lint */
@@ -214,10 +214,11 @@ pr_fact(BIGNUM *val)
putchar(':');
for (fact = &prime[0]; !BN_is_one(val); ++fact) {
/* Look for the smallest factor. */
- do {
+ while (fact <= pr_limit) {
if (BN_mod_word(val, (BN_ULONG)*fact) == 0)
break;
- } while (++fact <= pr_limit);
+ fact++;
+ }
/* Watch for primes larger than the table. */
if (fact > pr_limit) {