Correctly check for overflow in FX_atonum.

Instead of the existing method, use the CheckedNumeric class to check for
overflow during conversion.

BUG=chromium:596526

Review-Url: https://codereview.chromium.org/1992023003
diff --git a/core/fxcrt/fx_basic_util.cpp b/core/fxcrt/fx_basic_util.cpp
index abb2b94..aa36d56 100644
--- a/core/fxcrt/fx_basic_util.cpp
+++ b/core/fxcrt/fx_basic_util.cpp
@@ -94,11 +94,12 @@
   }
   m_DataList.RemoveAll();
 }
+
 void FX_atonum(const CFX_ByteStringC& strc, FX_BOOL& bInteger, void* pData) {
   if (strc.Find('.') == -1) {
     bInteger = TRUE;
     int cc = 0;
-    int integer = 0;
+    pdfium::base::CheckedNumeric<int> integer = 0;
     FX_STRSIZE len = strc.GetLength();
     bool bNegative = false;
     if (strc[0] == '+') {
@@ -108,21 +109,21 @@
       cc++;
     }
     while (cc < len && std::isdigit(strc[cc])) {
-      // TODO(dsinclair): This is not the right way to handle overflow.
       integer = integer * 10 + FXSYS_toDecimalDigit(strc.CharAt(cc));
-      if (integer < 0)
+      if (!integer.IsValid())
         break;
       cc++;
     }
     if (bNegative) {
       integer = -integer;
     }
-    *(int*)pData = integer;
+    *(int*)pData = integer.ValueOrDefault(0);
   } else {
     bInteger = FALSE;
     *(FX_FLOAT*)pData = FX_atof(strc);
   }
 }
+
 FX_FLOAT FX_atof(const CFX_ByteStringC& strc) {
   if (strc.IsEmpty())
     return 0.0;