From f6dabdae75720fbf5dc9ba807f385717cbfcf782 Mon Sep 17 00:00:00 2001 From: J08nY Date: Sun, 22 Apr 2018 18:51:08 +0200 Subject: Fix PARI stack leak in custom CM method. --- src/cm/custom.c | 14 +++++++------- src/io/cli.c | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/cm/custom.c b/src/cm/custom.c index fd58364..da80329 100644 --- a/src/cm/custom.c +++ b/src/cm/custom.c @@ -74,14 +74,13 @@ static void custom_quadr_next(custom_quadr_t *quadr) { if (equalii(quadr->i, imax) || quadr->nprimes == 0) { quadr->nprimes = custom_add_primes(quadr->r, quadr->order, &(quadr->Sp), quadr->nprimes); + imax = int2n(quadr->nprimes); } + pari_sp btop = avma; while (true) { - imax = int2n(quadr->nprimes); - while (cmpii(quadr->i, imax) < 0) { // debug_log("i %Pi", quadr->i); - pari_sp btop = avma; GEN pprod = gen_1; bits_t *ibits = bits_from_i_len(quadr->i, quadr->nprimes); for (size_t j = 0; j < quadr->nprimes; ++j) { @@ -100,8 +99,7 @@ static void custom_quadr_next(custom_quadr_t *quadr) { GEN x; GEN y; if (!cornacchia2(absp, quadr->order, &x, &y)) { - avma = btop; - quadr->i = addis(quadr->i, 1); + quadr->i = gerepileupto(btop, addis(quadr->i, 1)); // debug_log("Cornacchia fail"); continue; } @@ -124,14 +122,16 @@ static void custom_quadr_next(custom_quadr_t *quadr) { return; } } - avma = btop; - quadr->i = addis(quadr->i, 1); + quadr->i = gerepileupto(btop, addis(quadr->i, 1)); } quadr->r = addis(quadr->r, 1); quadr->nprimes = custom_add_primes(quadr->r, quadr->order, &(quadr->Sp), quadr->nprimes); rlog2 = sqri(mulii(addis(quadr->r, 1), logN)); + imax = int2n(quadr->nprimes); + + btop = avma; } } diff --git a/src/io/cli.c b/src/io/cli.c index f790ec3..2ca4b29 100644 --- a/src/io/cli.c +++ b/src/io/cli.c @@ -9,7 +9,8 @@ #include "exhaustive/brainpool.h" char cli_doc[] = - "ecgen, tool for generating Elliptic curve domain parameters.\v(C) 2017-2018 " + "ecgen, tool for generating Elliptic curve domain parameters.\v(C) " + "2017-2018 " "Eastern Seaboard Phishing Authority"; char cli_args_doc[] = "bits"; -- cgit v1.3.1