Use size_t for lengths in FXSYS_wcstof().

-- Change to nName variables (where n means uNsigned of some sort).
-- Remove the case where -1 means "unknown length" as callers always
   know the length.

Change-Id: I907198c99bafe613012c99a28b05b422a2bbb942
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/87010
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/css/cfx_cssdeclaration.cpp b/core/fxcrt/css/cfx_cssdeclaration.cpp
index 53b0d84..6bdbf4b 100644
--- a/core/fxcrt/css/cfx_cssdeclaration.cpp
+++ b/core/fxcrt/css/cfx_cssdeclaration.cpp
@@ -37,13 +37,13 @@
   DCHECK(pszValue);
   DCHECK_GT(iValueLen, 0);
 
-  int32_t iUsedLen = 0;
-  *pValue = FXSYS_wcstof(pszValue, iValueLen, &iUsedLen);
-  if (iUsedLen <= 0 || !isfinite(*pValue))
+  size_t nUsedLen = 0;
+  *pValue = FXSYS_wcstof(pszValue, iValueLen, &nUsedLen);
+  if (nUsedLen == 0 || !isfinite(*pValue))
     return false;
 
-  iValueLen -= iUsedLen;
-  pszValue += iUsedLen;
+  iValueLen -= nUsedLen;
+  pszValue += nUsedLen;
   *pOutUnit = CFX_CSSNumberValue::Unit::kNumber;
   if (iValueLen >= 1 && *pszValue == '%') {
     *pOutUnit = CFX_CSSNumberValue::Unit::kPercent;
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 53186fa..6b0b537 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -28,39 +28,36 @@
 
 }  // namespace
 
-float FXSYS_wcstof(const wchar_t* pwsStr, int32_t iLength, int32_t* pUsedLen) {
+float FXSYS_wcstof(const wchar_t* pwsStr, size_t nLength, size_t* pUsedLen) {
   DCHECK(pwsStr);
-
-  if (iLength < 0)
-    iLength = static_cast<int32_t>(wcslen(pwsStr));
-  if (iLength == 0)
+  if (nLength == 0)
     return 0.0f;
 
-  int32_t iUsedLen = 0;
+  size_t nUsedLen = 0;
   bool bNegtive = false;
-  switch (pwsStr[iUsedLen]) {
+  switch (pwsStr[nUsedLen]) {
     case '-':
       bNegtive = true;
       FALLTHROUGH;
     case '+':
-      iUsedLen++;
+      nUsedLen++;
       break;
   }
 
   float fValue = 0.0f;
-  while (iUsedLen < iLength) {
-    wchar_t wch = pwsStr[iUsedLen];
+  while (nUsedLen < nLength) {
+    wchar_t wch = pwsStr[nUsedLen];
     if (!FXSYS_IsDecimalDigit(wch))
       break;
 
     fValue = fValue * 10.0f + (wch - L'0');
-    iUsedLen++;
+    nUsedLen++;
   }
 
-  if (iUsedLen < iLength && pwsStr[iUsedLen] == L'.') {
+  if (nUsedLen < nLength && pwsStr[nUsedLen] == L'.') {
     float fPrecise = 0.1f;
-    while (++iUsedLen < iLength) {
-      wchar_t wch = pwsStr[iUsedLen];
+    while (++nUsedLen < nLength) {
+      wchar_t wch = pwsStr[nUsedLen];
       if (!FXSYS_IsDecimalDigit(wch))
         break;
 
@@ -69,20 +66,20 @@
     }
   }
 
-  if (iUsedLen < iLength &&
-      (pwsStr[iUsedLen] == 'e' || pwsStr[iUsedLen] == 'E')) {
-    ++iUsedLen;
+  if (nUsedLen < nLength &&
+      (pwsStr[nUsedLen] == 'e' || pwsStr[nUsedLen] == 'E')) {
+    ++nUsedLen;
 
     bool negative_exponent = false;
-    if (iUsedLen < iLength &&
-        (pwsStr[iUsedLen] == '-' || pwsStr[iUsedLen] == '+')) {
-      negative_exponent = pwsStr[iUsedLen] == '-';
-      ++iUsedLen;
+    if (nUsedLen < nLength &&
+        (pwsStr[nUsedLen] == '-' || pwsStr[nUsedLen] == '+')) {
+      negative_exponent = pwsStr[nUsedLen] == '-';
+      ++nUsedLen;
     }
 
     int32_t exp_value = 0;
-    while (iUsedLen < iLength) {
-      wchar_t wch = pwsStr[iUsedLen];
+    while (nUsedLen < nLength) {
+      wchar_t wch = pwsStr[nUsedLen];
       if (!FXSYS_IsDecimalDigit(wch))
         break;
 
@@ -97,7 +94,7 @@
         return 0.0f;
       }
 
-      ++iUsedLen;
+      ++nUsedLen;
     }
 
     for (size_t i = exp_value; i > 0; --i) {
@@ -111,7 +108,7 @@
   }
 
   if (pUsedLen)
-    *pUsedLen = iUsedLen;
+    *pUsedLen = nUsedLen;
 
   return bNegtive ? -fValue : fValue;
 }
diff --git a/core/fxcrt/fx_extension.h b/core/fxcrt/fx_extension.h
index 3cb5226..7319e5c 100644
--- a/core/fxcrt/fx_extension.h
+++ b/core/fxcrt/fx_extension.h
@@ -22,7 +22,7 @@
 
 #define FX_IsOdd(a) ((a)&1)
 
-float FXSYS_wcstof(const wchar_t* pwsStr, int32_t iLength, int32_t* pUsedLen);
+float FXSYS_wcstof(const wchar_t* pwsStr, size_t nLength, size_t* pUsedLen);
 wchar_t* FXSYS_wcsncpy(wchar_t* dstStr, const wchar_t* srcStr, size_t count);
 int32_t FXSYS_wcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t count);
 
diff --git a/core/fxcrt/fx_extension_unittest.cpp b/core/fxcrt/fx_extension_unittest.cpp
index 090c76b..70837fe 100644
--- a/core/fxcrt/fx_extension_unittest.cpp
+++ b/core/fxcrt/fx_extension_unittest.cpp
@@ -129,40 +129,40 @@
 }
 
 TEST(fxcrt, FXSYS_wcstof) {
-  int32_t used_len = 0;
+  size_t used_len = 0;
   EXPECT_FLOAT_EQ(-12.0f, FXSYS_wcstof(L"-12", 3, &used_len));
-  EXPECT_EQ(3, used_len);
+  EXPECT_EQ(3u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(1.5362f, FXSYS_wcstof(L"1.5362", 6, &used_len));
-  EXPECT_EQ(6, used_len);
+  EXPECT_EQ(6u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(0.875f, FXSYS_wcstof(L"0.875", 5, &used_len));
-  EXPECT_EQ(5, used_len);
+  EXPECT_EQ(5u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(5.56e-2f, FXSYS_wcstof(L"5.56e-2", 7, &used_len));
-  EXPECT_EQ(7, used_len);
+  EXPECT_EQ(7u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(1.234e10f, FXSYS_wcstof(L"1.234E10", 8, &used_len));
-  EXPECT_EQ(8, used_len);
+  EXPECT_EQ(8u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(0.0f, FXSYS_wcstof(L"1.234E100000000000000", 21, &used_len));
-  EXPECT_EQ(0, used_len);
+  EXPECT_EQ(0u, used_len);
 
   used_len = 0;
   EXPECT_FLOAT_EQ(0.0f, FXSYS_wcstof(L"1.234E-128", 21, &used_len));
-  EXPECT_EQ(0, used_len);
+  EXPECT_EQ(0u, used_len);
 
   // TODO(dsinclair): This should round as per IEEE 64-bit values.
   // EXPECT_EQ(L"123456789.01234567", FXSYS_wcstof(L"123456789.012345678"));
   used_len = 0;
   EXPECT_FLOAT_EQ(123456789.012345678f,
                   FXSYS_wcstof(L"123456789.012345678", 19, &used_len));
-  EXPECT_EQ(19, used_len);
+  EXPECT_EQ(19u, used_len);
 
   // TODO(dsinclair): This is spec'd as rounding when > 16 significant digits
   // prior to the exponent.
@@ -170,7 +170,7 @@
   used_len = 0;
   EXPECT_FLOAT_EQ(99999999999999999.0f,
                   FXSYS_wcstof(L"99999999999999999", 17, &used_len));
-  EXPECT_EQ(17, used_len);
+  EXPECT_EQ(17u, used_len);
 
   // For https://crbug.com/pdfium/1217
   EXPECT_FLOAT_EQ(0.0f, FXSYS_wcstof(L"e76", 3, nullptr));
@@ -181,14 +181,14 @@
       L"88888888888888888888888888888888888888888888888888888888888888888888888"
       L"88888888888888888888888888888888888888888888888888888888888",
       130, &used_len)));
-  EXPECT_EQ(130, used_len);
+  EXPECT_EQ(130u, used_len);
 
   used_len = 0;
   EXPECT_TRUE(isinf(FXSYS_wcstof(
       L"-8888888888888888888888888888888888888888888888888888888888888888888888"
       L"888888888888888888888888888888888888888888888888888888888888",
       131, &used_len)));
-  EXPECT_EQ(131, used_len);
+  EXPECT_EQ(131u, used_len);
 }
 
 TEST(fxcrt, FXSYS_SafeOps) {
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
index b6eb7ea..65698a7 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
@@ -306,7 +306,7 @@
 
 CXFA_FMLexer::Token CXFA_FMLexer::AdvanceForNumber() {
   // This will set end to the character after the end of the number.
-  int32_t used_length = 0;
+  size_t used_length = 0;
   if (m_nCursor < m_spInput.size()) {
     FXSYS_wcstof(&m_spInput[m_nCursor], m_spInput.size() - m_nCursor,
                  &used_length);
diff --git a/xfa/fxfa/parser/cxfa_measurement.cpp b/xfa/fxfa/parser/cxfa_measurement.cpp
index c188ef3..3da98f8 100644
--- a/xfa/fxfa/parser/cxfa_measurement.cpp
+++ b/xfa/fxfa/parser/cxfa_measurement.cpp
@@ -42,13 +42,13 @@
   if (wsMeasure[0] == L'=')
     wsMeasure = wsMeasure.Last(wsMeasure.GetLength() - 1);
 
-  int32_t iUsedLen = 0;
+  size_t nUsedLen = 0;
   float fValue = FXSYS_wcstof(wsMeasure.unterminated_c_str(),
-                              wsMeasure.GetLength(), &iUsedLen);
+                              wsMeasure.GetLength(), &nUsedLen);
   if (!isfinite(fValue))
     fValue = 0.0f;
 
-  wsMeasure = wsMeasure.Last(wsMeasure.GetLength() - iUsedLen);
+  wsMeasure = wsMeasure.Last(wsMeasure.GetLength() - nUsedLen);
   Set(fValue, GetUnitFromString(wsMeasure));
 }