Index: third_party/bigint/BigInteger.cc |
diff --git a/third_party/bigint/BigInteger.cc b/third_party/bigint/BigInteger.cc |
index 3b23aa1e7b25cb3c1573c826c5390979b43558f9..24088f6fce103916ed0e68d3362bab9810a8a1d6 100644 |
--- a/third_party/bigint/BigInteger.cc |
+++ b/third_party/bigint/BigInteger.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 |
Tom Sepez
2014/12/03 00:14:19
nit: . at end of sentence.
|
+ |
#include "BigInteger.hh" |
void BigInteger::operator =(const BigInteger &x) { |
@@ -14,7 +20,11 @@ BigInteger::BigInteger(const Blk *b, Index blen, Sign s) : mag(b, blen) { |
switch (s) { |
case zero: |
if (!mag.isZero()) |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::BigInteger(const Blk *, Index, Sign): Cannot use a sign of zero with a nonzero magnitude"; |
+#endif |
sign = zero; |
break; |
case positive: |
@@ -25,7 +35,11 @@ BigInteger::BigInteger(const Blk *b, Index blen, Sign s) : mag(b, blen) { |
default: |
/* g++ seems to be optimizing out this case on the assumption |
* that the sign is a valid member of the enumeration. Oh well. */ |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::BigInteger(const Blk *, Index, Sign): Invalid sign"; |
+#endif |
} |
} |
@@ -33,7 +47,11 @@ BigInteger::BigInteger(const BigUnsigned &x, Sign s) : mag(x) { |
switch (s) { |
case zero: |
if (!mag.isZero()) |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::BigInteger(const BigUnsigned &, Sign): Cannot use a sign of zero with a nonzero magnitude"; |
+#endif |
sign = zero; |
break; |
case positive: |
@@ -44,7 +62,11 @@ BigInteger::BigInteger(const BigUnsigned &x, Sign s) : mag(x) { |
default: |
/* g++ seems to be optimizing out this case on the assumption |
* that the sign is a valid member of the enumeration. Oh well. */ |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::BigInteger(const BigUnsigned &, Sign): Invalid sign"; |
+#endif |
} |
} |
@@ -92,8 +114,12 @@ inline X convertBigUnsignedToPrimitiveAccess(const BigUnsigned &a) { |
template <class X> |
X BigInteger::convertToUnsignedPrimitive() const { |
if (sign == negative) |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::to<Primitive>: " |
"Cannot convert a negative integer to an unsigned type"; |
+#endif |
else |
return convertBigUnsignedToPrimitiveAccess<X>(mag); |
} |
@@ -120,8 +146,12 @@ X BigInteger::convertToSignedPrimitive() const { |
} |
// Otherwise fall through. |
} |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::to<Primitive>: " |
"Value is too big to fit in the requested type"; |
+#endif |
} |
unsigned long BigInteger::toUnsignedLong () const { return convertToUnsignedPrimitive<unsigned long > (); } |
@@ -149,7 +179,11 @@ BigInteger::CmpRes BigInteger::compareTo(const BigInteger &x) const { |
// Compare the magnitudes, but return the opposite result |
return CmpRes(-mag.compareTo(x.mag)); |
default: |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger internal error"; |
+#endif |
} |
} |
@@ -281,7 +315,11 @@ void BigInteger::divideWithRemainder(const BigInteger &b, BigInteger &q) { |
// Defend against aliased calls; |
// same idea as in BigUnsigned::divideWithRemainder . |
if (this == &q) |
+#ifdef FOXIT_CHROME_BUILD |
+ abort(); |
+#else |
throw "BigInteger::divideWithRemainder: Cannot write quotient and remainder into the same variable"; |
+#endif |
if (this == &b || &q == &b) { |
BigInteger tmpB(b); |
divideWithRemainder(tmpB, q); |