Use span<>/size_t in GetNumTrailingLimit().
- convert some pFoo variables to spFoo where Foo is a span<>.
- rename some gs_ variables to k-constant names as well.
- check negative earlier in ParseTimeZone() so optimizer can
remove implicit bounds check later on.
Change-Id: I4eaa222e870dc31480abb99a14faaf7c9a5d9ee8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/51990
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fgas/crt/cfgas_stringformatter.cpp b/xfa/fgas/crt/cfgas_stringformatter.cpp
index d3da5ee..60b8c46 100644
--- a/xfa/fgas/crt/cfgas_stringformatter.cpp
+++ b/xfa/fgas/crt/cfgas_stringformatter.cpp
@@ -74,29 +74,32 @@
{L"MDT", -6, 0}, {L"MST", -7, 0}, {L"PDT", -7, 0}, {L"PST", -8, 0},
};
-const wchar_t gs_wsTimeSymbols[] = L"hHkKMSFAzZ";
-const wchar_t gs_wsDateSymbols[] = L"DJMEeGgYwW";
-const wchar_t gs_wsConstChars[] = L",-:/. ";
+const wchar_t kTimeSymbols[] = L"hHkKMSFAzZ";
+const wchar_t kDateSymbols[] = L"DJMEeGgYwW";
+const wchar_t kConstChars[] = L",-:/. ";
-size_t ParseTimeZone(pdfium::span<const wchar_t> pStr, FX_TIMEZONE* tz) {
+size_t ParseTimeZone(pdfium::span<const wchar_t> spStr, FX_TIMEZONE* tz) {
tz->tzHour = 0;
tz->tzMinute = 0;
- if (pStr.empty())
+ if (spStr.empty())
return 0;
+ // Keep index by 0 close to empty() check above for optimizer's sake.
+ const bool bNegative = (spStr[0] == '-');
+
size_t iStart = 1;
size_t iEnd = iStart + 2;
- while (iStart < pStr.size() && iStart < iEnd)
- tz->tzHour = tz->tzHour * 10 + FXSYS_DecimalCharToInt(pStr[iStart++]);
+ while (iStart < spStr.size() && iStart < iEnd)
+ tz->tzHour = tz->tzHour * 10 + FXSYS_DecimalCharToInt(spStr[iStart++]);
- if (iStart < pStr.size() && pStr[iStart] == ':')
+ if (iStart < spStr.size() && spStr[iStart] == ':')
iStart++;
iEnd = iStart + 2;
- while (iStart < pStr.size() && iStart < iEnd)
- tz->tzMinute = tz->tzMinute * 10 + FXSYS_DecimalCharToInt(pStr[iStart++]);
+ while (iStart < spStr.size() && iStart < iEnd)
+ tz->tzMinute = tz->tzMinute * 10 + FXSYS_DecimalCharToInt(spStr[iStart++]);
- if (pStr[0] == '-')
+ if (bNegative)
tz->tzHour = -tz->tzHour;
return iStart;
@@ -108,30 +111,30 @@
return iKeyValue;
}
-WideString GetLiteralText(pdfium::span<const wchar_t> pStrPattern,
+WideString GetLiteralText(pdfium::span<const wchar_t> spStrPattern,
size_t* iPattern) {
WideString wsOutput;
- if (*iPattern >= pStrPattern.size() || pStrPattern[*iPattern] != '\'')
+ if (*iPattern >= spStrPattern.size() || spStrPattern[*iPattern] != '\'')
return wsOutput;
(*iPattern)++;
int32_t iQuote = 1;
- while (*iPattern < pStrPattern.size()) {
- if (pStrPattern[*iPattern] == '\'') {
+ while (*iPattern < spStrPattern.size()) {
+ if (spStrPattern[*iPattern] == '\'') {
iQuote++;
- if ((*iPattern + 1 >= pStrPattern.size()) ||
- ((pStrPattern[*iPattern + 1] != '\'') && (iQuote % 2 == 0))) {
+ if ((*iPattern + 1 >= spStrPattern.size()) ||
+ ((spStrPattern[*iPattern + 1] != '\'') && (iQuote % 2 == 0))) {
break;
}
iQuote++;
(*iPattern)++;
- } else if (pStrPattern[*iPattern] == '\\' &&
- (*iPattern + 1 < pStrPattern.size()) &&
- pStrPattern[*iPattern + 1] == 'u') {
+ } else if (spStrPattern[*iPattern] == '\\' &&
+ (*iPattern + 1 < spStrPattern.size()) &&
+ spStrPattern[*iPattern + 1] == 'u') {
int32_t iKeyValue = 0;
*iPattern += 2;
- for (int32_t i = 0; *iPattern < pStrPattern.size() && i < 4; ++i) {
- wchar_t ch = pStrPattern[(*iPattern)++];
+ for (int32_t i = 0; *iPattern < spStrPattern.size() && i < 4; ++i) {
+ wchar_t ch = spStrPattern[(*iPattern)++];
iKeyValue = ConvertHex(iKeyValue, ch);
}
if (iKeyValue != 0)
@@ -139,32 +142,32 @@
continue;
}
- wsOutput += pStrPattern[(*iPattern)++];
+ wsOutput += spStrPattern[(*iPattern)++];
}
return wsOutput;
}
-WideString GetLiteralTextReverse(pdfium::span<const wchar_t> pStrPattern,
+WideString GetLiteralTextReverse(pdfium::span<const wchar_t> spStrPattern,
size_t* iPattern) {
WideString wsOutput;
- if (*iPattern >= pStrPattern.size() || pStrPattern[*iPattern] != '\'')
+ if (*iPattern >= spStrPattern.size() || spStrPattern[*iPattern] != '\'')
return wsOutput;
(*iPattern)--;
int32_t iQuote = 1;
- while (*iPattern < pStrPattern.size()) {
- if (pStrPattern[*iPattern] == '\'') {
+ while (*iPattern < spStrPattern.size()) {
+ if (spStrPattern[*iPattern] == '\'') {
iQuote++;
- if (*iPattern - 1 >= pStrPattern.size() ||
- ((pStrPattern[*iPattern - 1] != '\'') && (iQuote % 2 == 0))) {
+ if (*iPattern - 1 >= spStrPattern.size() ||
+ ((spStrPattern[*iPattern - 1] != '\'') && (iQuote % 2 == 0))) {
break;
}
iQuote++;
(*iPattern)--;
- } else if (pStrPattern[*iPattern] == '\\' &&
- *iPattern + 1 < pStrPattern.size() &&
- pStrPattern[*iPattern + 1] == 'u') {
+ } else if (spStrPattern[*iPattern] == '\\' &&
+ *iPattern + 1 < spStrPattern.size() &&
+ spStrPattern[*iPattern + 1] == 'u') {
(*iPattern)--;
int32_t iKeyValue = 0;
int32_t iLen = wsOutput.GetLength();
@@ -179,7 +182,7 @@
}
continue;
}
- wsOutput = pStrPattern[(*iPattern)--] + wsOutput;
+ wsOutput = spStrPattern[(*iPattern)--] + wsOutput;
}
return wsOutput;
}
@@ -205,25 +208,25 @@
return result.has_value();
}
-bool ExtractCountDigits(pdfium::span<const wchar_t> str,
+bool ExtractCountDigits(pdfium::span<const wchar_t> spStr,
size_t count,
size_t* cc,
uint32_t* value) {
for (size_t i = 0; i < count; ++i) {
- if (*cc >= str.size() || !FXSYS_IsDecimalDigit(str[*cc]))
+ if (*cc >= spStr.size() || !FXSYS_IsDecimalDigit(spStr[*cc]))
return false;
- *value = *value * 10 + FXSYS_DecimalCharToInt(str[(*cc)++]);
+ *value = *value * 10 + FXSYS_DecimalCharToInt(spStr[(*cc)++]);
}
return true;
}
-bool ExtractCountDigitsWithOptional(pdfium::span<const wchar_t> str,
+bool ExtractCountDigitsWithOptional(pdfium::span<const wchar_t> spStr,
int count,
size_t* cc,
uint32_t* value) {
- if (!ExtractCountDigits(str, count, cc, value))
+ if (!ExtractCountDigits(spStr, count, cc, value))
return false;
- ExtractCountDigits(str, 1, cc, value);
+ ExtractCountDigits(spStr, 1, cc, value);
return true;
}
@@ -250,7 +253,7 @@
ccf++;
continue;
}
- if (!pdfium::ContainsValue(gs_wsDateSymbols, spDatePattern[ccf])) {
+ if (!pdfium::ContainsValue(kDateSymbols, spDatePattern[ccf])) {
if (spDatePattern[ccf] != spDate[*cc])
return false;
(*cc)++;
@@ -372,7 +375,7 @@
ccf++;
continue;
}
- if (!pdfium::ContainsValue(gs_wsTimeSymbols, spTimePattern[ccf])) {
+ if (!pdfium::ContainsValue(kTimeSymbols, spTimePattern[ccf])) {
if (spTimePattern[ccf] != spTime[*cc])
return false;
(*cc)++;
@@ -520,10 +523,10 @@
}
uint16_t GetWeekDay(uint16_t year, uint16_t month, uint16_t day) {
- static const uint16_t month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
+ static const uint8_t kMonthDay[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
uint16_t nDays =
(year - 1) % 7 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
- nDays += month_day[month - 1] + day;
+ nDays += kMonthDay[month - 1] + day;
if (FX_IsLeapYear(year) && month > 2)
nDays++;
return nDays % 7;
@@ -574,7 +577,7 @@
ccf++;
continue;
}
- if (!pdfium::ContainsValue(gs_wsDateSymbols, spDatePattern[ccf])) {
+ if (!pdfium::ContainsValue(kDateSymbols, spDatePattern[ccf])) {
wsResult += spDatePattern[ccf++];
continue;
}
@@ -642,7 +645,7 @@
ccf++;
continue;
}
- if (!pdfium::ContainsValue(gs_wsTimeSymbols, spTimePattern[ccf])) {
+ if (!pdfium::ContainsValue(kTimeSymbols, spTimePattern[ccf])) {
wsResult += spTimePattern[ccf++];
continue;
}
@@ -852,7 +855,7 @@
if (m_spPattern[ccf] == '\'') {
GetLiteralText(m_spPattern, &ccf);
} else if (!bBraceOpen &&
- !pdfium::ContainsValue(gs_wsConstChars, m_spPattern[ccf])) {
+ !pdfium::ContainsValue(kConstChars, m_spPattern[ccf])) {
WideString wsCategory(m_spPattern[ccf]);
ccf++;
while (true) {
@@ -907,7 +910,7 @@
wsPurgePattern +=
WideStringView(m_spPattern.data() + iCurChar, ccf - iCurChar + 1);
} else if (!bBrackOpen &&
- !pdfium::ContainsValue(gs_wsConstChars, m_spPattern[ccf])) {
+ !pdfium::ContainsValue(kConstChars, m_spPattern[ccf])) {
WideString wsSearchCategory(m_spPattern[ccf]);
ccf++;
while (ccf < m_spPattern.size() && m_spPattern[ccf] != '{' &&
@@ -957,7 +960,7 @@
*wsPurgePattern +=
WideStringView(m_spPattern.data() + iCurChar, ccf - iCurChar + 1);
} else if (!bBrackOpen &&
- !pdfium::ContainsValue(gs_wsConstChars, m_spPattern[ccf])) {
+ !pdfium::ContainsValue(kConstChars, m_spPattern[ccf])) {
WideString wsCategory(m_spPattern[ccf]);
ccf++;
while (ccf < m_spPattern.size() && m_spPattern[ccf] != '{' &&
@@ -1545,7 +1548,7 @@
wsTempPattern +=
WideStringView(m_spPattern.data() + iCurChar, ccf - iCurChar + 1);
} else if (!bBraceOpen && iFindCategory != 3 &&
- !pdfium::ContainsValue(gs_wsConstChars, m_spPattern[ccf])) {
+ !pdfium::ContainsValue(kConstChars, m_spPattern[ccf])) {
WideString wsCategory(m_spPattern[ccf]);
ccf++;
while (ccf < m_spPattern.size() && m_spPattern[ccf] != '{' &&