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));
}