| Index: third_party/bigint/BigUnsignedInABase.cc
|
| diff --git a/third_party/bigint/BigUnsignedInABase.cc b/third_party/bigint/BigUnsignedInABase.cc
|
| index 999faaf2db0f54f40ae51ed2833f8bea463a14a3..a24042d5389f3b100ca3c9ed0d5feeadee2d8f4c 100644
|
| --- a/third_party/bigint/BigUnsignedInABase.cc
|
| +++ b/third_party/bigint/BigUnsignedInABase.cc
|
| @@ -1,15 +1,29 @@
|
| +// Copyright 2014 PDFium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Original code by Matt McCutchen, see the LICENSE file.
|
| +
|
| #include "BigUnsignedInABase.hh"
|
|
|
| BigUnsignedInABase::BigUnsignedInABase(const Digit *d, Index l, Base base)
|
| : NumberlikeArray<Digit>(d, l), base(base) {
|
| // Check the base
|
| if (base < 2)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase::BigUnsignedInABase(const Digit *, Index, Base): The base must be at least 2";
|
| +#endif
|
|
|
| // Validate the digits.
|
| for (Index i = 0; i < l; i++)
|
| if (blk[i] >= base)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase::BigUnsignedInABase(const Digit *, Index, Base): A digit is too large for the specified base";
|
| +#endif
|
|
|
| // Eliminate any leading zeros we may have been passed.
|
| zapLeadingZeros();
|
| @@ -32,7 +46,11 @@ namespace {
|
| BigUnsignedInABase::BigUnsignedInABase(const BigUnsigned &x, Base base) {
|
| // Check the base
|
| if (base < 2)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase(BigUnsigned, Base): The base must be at least 2";
|
| +#endif
|
| this->base = base;
|
|
|
| // Get an upper bound on how much space we need
|
| @@ -73,7 +91,11 @@ BigUnsignedInABase::operator BigUnsigned() const {
|
| BigUnsignedInABase::BigUnsignedInABase(const std::string &s, Base base) {
|
| // Check the base.
|
| if (base > 36)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase(std::string, Base): The default string conversion routines use the symbol set 0-9, A-Z and therefore support only up to base 36. You tried a conversion with a base over 36; write your own string conversion routine.";
|
| +#endif
|
| // Save the base.
|
| // This pattern is seldom seen in C++, but the analogous ``this.'' is common in Java.
|
| this->base = base;
|
| @@ -94,17 +116,29 @@ BigUnsignedInABase::BigUnsignedInABase(const std::string &s, Base base) {
|
| else if (theSymbol >= 'a' && theSymbol <= 'z')
|
| blk[digitNum] = theSymbol - 'a' + 10;
|
| else
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase(std::string, Base): Bad symbol in input. Only 0-9, A-Z, a-z are accepted.";
|
| +#endif
|
|
|
| if (blk[digitNum] >= base)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase::BigUnsignedInABase(const Digit *, Index, Base): A digit is too large for the specified base";
|
| +#endif
|
| }
|
| zapLeadingZeros();
|
| }
|
|
|
| BigUnsignedInABase::operator std::string() const {
|
| if (base > 36)
|
| +#ifdef FOXIT_CHROME_BUILD
|
| + abort();
|
| +#else
|
| throw "BigUnsignedInABase ==> std::string: The default string conversion routines use the symbol set 0-9, A-Z and therefore support only up to base 36. You tried a conversion with a base over 36; write your own string conversion routine.";
|
| +#endif
|
| if (len == 0)
|
| return std::string("0");
|
| // Some compilers don't have push_back, so use a char * buffer instead.
|
|
|