diff options
Diffstat (limited to 'third_party/bigint/BigUnsigned.cc')
-rw-r--r-- | third_party/bigint/BigUnsigned.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/third_party/bigint/BigUnsigned.cc b/third_party/bigint/BigUnsigned.cc index d7f9889cc6..863fadcb39 100644 --- a/third_party/bigint/BigUnsigned.cc +++ b/third_party/bigint/BigUnsigned.cc @@ -1,3 +1,9 @@ +// 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 "BigUnsigned.hh" // Memory management definitions have moved to the bottom of NumberlikeArray.hh. @@ -189,8 +195,12 @@ void BigUnsigned::subtract(const BigUnsigned &a, const BigUnsigned &b) { return; } else if (a.len < b.len) // If a is shorter than b, the result is negative. +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::subtract: " "Negative result in unsigned calculation"; +#endif // Some variables... bool borrowIn, borrowOut; Blk temp; @@ -223,7 +233,11 @@ void BigUnsigned::subtract(const BigUnsigned &a, const BigUnsigned &b) { * predictable state. */ if (borrowIn) { len = 0; +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::subtract: Negative result in unsigned calculation"; +#endif } else // Copy over the rest of the blocks for (; i < a.len; i++) @@ -386,7 +400,11 @@ void BigUnsigned::divideWithRemainder(const BigUnsigned &b, BigUnsigned &q) { * It would be silly to try to write quotient and remainder to the * same variable. Rule that out right away. */ if (this == &q) +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::divideWithRemainder: Cannot write quotient and remainder into the same variable"; +#endif /* Now *this and q are separate, so the only concern is that b might be * aliased to one of them. If so, use a temporary copy of b. */ if (this == &b || &q == &b) { @@ -596,8 +614,12 @@ void BigUnsigned::bitShiftLeft(const BigUnsigned &a, int b) { DTRT_ALIASED(this == &a, bitShiftLeft(a, b)); if (b < 0) { if (b << 1 == 0) +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::bitShiftLeft: " "Pathological shift amount not implemented"; +#endif else { bitShiftRight(a, -b); return; @@ -622,8 +644,12 @@ void BigUnsigned::bitShiftRight(const BigUnsigned &a, int b) { DTRT_ALIASED(this == &a, bitShiftRight(a, b)); if (b < 0) { if (b << 1 == 0) +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::bitShiftRight: " "Pathological shift amount not implemented"; +#endif else { bitShiftLeft(a, -b); return; @@ -679,7 +705,11 @@ void BigUnsigned::operator ++(int) { // Prefix decrement void BigUnsigned::operator --() { if (len == 0) +#ifdef FOXIT_CHROME_BUILD + abort(); +#else throw "BigUnsigned::operator --(): Cannot decrement an unsigned zero"; +#endif Index i; bool borrow = true; for (i = 0; borrow; i++) { |