From 79881c050bfa025ac58e0940c496592d857e3044 Mon Sep 17 00:00:00 2001 From: Matt McCutchen Date: Thu, 26 Mar 2009 20:19:54 -0400 Subject: [PATCH] BigUnsignedInABase(std::string): Reject digits too big for the base. Bug reported by Niakam Kazemi. --- BigUnsignedInABase.cc | 3 +++ ChangeLog | 5 +++++ testsuite.cc | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/BigUnsignedInABase.cc b/BigUnsignedInABase.cc index c849014..999faaf 100644 --- a/BigUnsignedInABase.cc +++ b/BigUnsignedInABase.cc @@ -95,6 +95,9 @@ BigUnsignedInABase::BigUnsignedInABase(const std::string &s, Base base) { blk[digitNum] = theSymbol - 'a' + 10; else throw "BigUnsignedInABase(std::string, Base): Bad symbol in input. Only 0-9, A-Z, a-z are accepted."; + + if (blk[digitNum] >= base) + throw "BigUnsignedInABase::BigUnsignedInABase(const Digit *, Index, Base): A digit is too large for the specified base"; } zapLeadingZeros(); } diff --git a/ChangeLog b/ChangeLog index bf86875..5294223 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,11 @@ roughly corresponds to the release date of that version in `YYYY.MM.DD[.N]' format, where `.N' goes `.2', `.3', etc. if there are multiple versions on the same day. The topmost version listed is the one you have. +Unreleased +---------- +- BigUnsignedInABase(std::string) Reject digits too big for the base. + Bug reported by Niakam Kazemi. + 2008.07.20 ---------- Dennis Yew pointed out serious problems with ambiguities and unwanted diff --git a/testsuite.cc b/testsuite.cc index 7817e9a..7cb9768 100644 --- a/testsuite.cc +++ b/testsuite.cc @@ -311,6 +311,13 @@ TEST(p2); //-15 TEST(check(num)); //25 } +{ + /* Test that BigUnsignedInABase(std::string) constructor rejects digits + * too big for the specified base. + * Bug reported by Niakam Kazemi. */ + TEST(BigUnsignedInABase("f", 10)); //error +} + } catch (const char *err) { cout << "UNCAUGHT ERROR: " << err << endl; } -- 2.34.1