From 81f9eeef041f2974274751d7508598049ae32db2 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Tue, 5 Sep 2017 15:33:18 -0400 Subject: Convert FX_STRSIZE int->size_t Change the underlying type for FX_STRSIZE to size_t from int. This will make the value unsigned and thus all values in the range of the type will be valid. This allows for the final remove of negative length strings, but also introduces a some casting and functional errors, since many parts of the code base assume that FX_STRSIZE is int or another signed type. This also CL fixes these errors. BUG=pdfium:828 Change-Id: I231dca59e96fc9330cbb099eecbdfc41fcf86f5b Reviewed-on: https://pdfium-review.googlesource.com/11830 Reviewed-by: Henrique Nakashima Reviewed-by: Tom Sepez Commit-Queue: Ryan Harrison --- xfa/fgas/crt/cfgas_formatstring.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'xfa/fgas') diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp index 9da8bb9583..df95a3588a 100644 --- a/xfa/fgas/crt/cfgas_formatstring.cpp +++ b/xfa/fgas/crt/cfgas_formatstring.cpp @@ -293,7 +293,7 @@ bool ParseLocaleDate(const CFX_WideString& wsDate, } } } else if (symbol == L"YY" || symbol == L"YYYY") { - if (*cc + symbol.GetLength() > len) + if (*cc + pdfium::base::checked_cast(symbol.GetLength()) > len) return false; year = 0; @@ -417,11 +417,13 @@ bool ParseLocaleTime(const CFX_WideString& wsTime, } else if (symbol == L"A") { CFX_WideString wsAM = pLocale->GetMeridiemName(true); CFX_WideString wsPM = pLocale->GetMeridiemName(false); - if ((*cc + wsAM.GetLength() <= len) && + if ((*cc + pdfium::base::checked_cast(wsAM.GetLength()) <= + len) && (CFX_WideStringC(str + *cc, wsAM.GetLength()) == wsAM)) { *cc += wsAM.GetLength(); bHasA = true; - } else if ((*cc + wsPM.GetLength() <= len) && + } else if ((*cc + pdfium::base::checked_cast(wsPM.GetLength()) <= + len) && (CFX_WideStringC(str + *cc, wsPM.GetLength()) == wsPM)) { *cc += wsPM.GetLength(); bHasA = true; @@ -2087,12 +2089,13 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, if (cc >= 0) { int nPos = dot_index.value() % 3; wsOutput->clear(); - for (int32_t i = 0; i < dot_index; i++) { + for (int32_t i = 0; + i < pdfium::base::checked_cast(dot_index.value()); i++) { if (i % 3 == nPos && i != 0) *wsOutput += wsGroupSymbol; *wsOutput += wsSrcNum[i]; } - if (dot_index < len) { + if (pdfium::base::checked_cast(dot_index.value()) < len) { *wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal); *wsOutput += wsSrcNum.Right(len - dot_index.value() - 1); } @@ -2102,7 +2105,8 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, } return false; } - if (dot_index_f == wsNumFormat.GetLength()) { + if (dot_index_f == + pdfium::base::checked_cast(wsNumFormat.GetLength())) { if (!bAddNeg && bNeg) { *wsOutput = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + *wsOutput; @@ -2115,7 +2119,7 @@ bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum, if (strf[dot_index_f] == 'V') { *wsOutput += wsDotSymbol; } else if (strf[dot_index_f] == '.') { - if (dot_index < len) + if (pdfium::base::checked_cast(dot_index.value()) < len) *wsOutput += wsDotSymbol; else if (strf[dot_index_f + 1] == '9' || strf[dot_index_f + 1] == 'Z') *wsOutput += wsDotSymbol; -- cgit v1.2.3