From: Alexei Sheplyakov Date: Thu, 23 Oct 2008 13:48:14 +0000 (+0400) Subject: [bugfix] integer_cra: check if arguments contain at least 2 moduli X-Git-Tag: release_1-5-0~33 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=d625a28c3def007a9d2d5108141a6f6a4889bf9d [bugfix] integer_cra: check if arguments contain at least 2 moduli While at it, also fix exam_cra so it does not produce pointless inputs. --- diff --git a/check/exam_cra.cpp b/check/exam_cra.cpp index 2c6163ee..6e247704 100644 --- a/check/exam_cra.cpp +++ b/check/exam_cra.cpp @@ -102,12 +102,14 @@ make_random_moduli(const cln::cl_I& limit) std::vector moduli; cln::cl_I prod(1); cln::cl_I next = random_I(std::min(limit >> 1, cln::cl_I(128))); + unsigned count = 0; do { cln::cl_I tmp = nextprobprime(next); next = tmp + random_I(cln::cl_I(10)) + 1; prod = prod*tmp; moduli.push_back(tmp); - } while (prod < limit); + ++count; + } while (prod < limit || (count < 2)); return moduli; } diff --git a/ginac/polynomial/cra_garner.cpp b/ginac/polynomial/cra_garner.cpp index b400adbe..76d1e075 100644 --- a/ginac/polynomial/cra_garner.cpp +++ b/ginac/polynomial/cra_garner.cpp @@ -3,6 +3,7 @@ #include #include #include "cra_garner.hpp" +#include "compiler.h" namespace cln { @@ -73,6 +74,8 @@ mixed_radix_2_ordinary(const vector& mixed_radix_coeffs, cl_I integer_cra(const vector& residues, const vector& moduli) { + if (unlikely(moduli.size() < 2)) + throw std::invalid_argument("integer_cra: need at least 2 moduli"); vector recips(moduli.size() - 1); compute_recips(recips, moduli);