From f765805983d157e9a21d7202ba49148f24d226f3 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 8 Aug 2018 22:20:29 +0000 Subject: Remove unused codepage from WideString::GetWideString(). Consolidate code into sole caller, which always retrieves a string from the "default ANSI code page". Add unit test for this code path. Fix sign extension bug giving bogus 0xffffff80 codepoint uncovered by unit test on non-windows. Note windows result is different because the system conversion routine does actually work. Change-Id: I1c1246b203ee66e9ff0b6fccf97594788bcd0fca Reviewed-on: https://pdfium-review.googlesource.com/39730 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxcrt/widestring.cpp | 59 ++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 44 deletions(-) (limited to 'core/fxcrt/widestring.cpp') diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp index 7dd1c30eb0..97073f170d 100644 --- a/core/fxcrt/widestring.cpp +++ b/core/fxcrt/widestring.cpp @@ -277,43 +277,6 @@ Optional TryVSWPrintf(size_t size, return {str}; } -#ifndef NDEBUG -bool IsValidWideCodePage(uint16_t codepage) { - switch (codepage) { - case FX_CODEPAGE_DefANSI: - case FX_CODEPAGE_ShiftJIS: - case FX_CODEPAGE_ChineseSimplified: - case FX_CODEPAGE_Hangul: - case FX_CODEPAGE_ChineseTraditional: - return true; - default: - return false; - } -} -#endif - -WideString GetWideString(uint16_t codepage, const ByteStringView& bstr) { -#ifndef NDEBUG - ASSERT(IsValidWideCodePage(codepage)); -#endif - - int src_len = bstr.GetLength(); - int dest_len = FXSYS_MultiByteToWideChar( - codepage, 0, bstr.unterminated_c_str(), src_len, nullptr, 0); - if (!dest_len) - return WideString(); - - WideString wstr; - { - // Span's lifetime must end before ReleaseBuffer() below. - pdfium::span dest_buf = wstr.GetBuffer(dest_len); - FXSYS_MultiByteToWideChar(codepage, 0, bstr.unterminated_c_str(), src_len, - dest_buf.data(), dest_len); - } - wstr.ReleaseBuffer(dest_len); - return wstr; -} - } // namespace namespace fxcrt { @@ -902,14 +865,22 @@ size_t WideString::Replace(const WideStringView& pOld, } // static -WideString WideString::FromLocal(const ByteStringView& str) { - return FromCodePage(str, 0); -} +WideString WideString::FromLocal(const ByteStringView& bstr) { + int src_len = bstr.GetLength(); + int dest_len = FXSYS_MultiByteToWideChar( + FX_CODEPAGE_DefANSI, 0, bstr.unterminated_c_str(), src_len, nullptr, 0); + if (!dest_len) + return WideString(); -// static -WideString WideString::FromCodePage(const ByteStringView& str, - uint16_t codepage) { - return GetWideString(codepage, str); + WideString wstr; + { + // Span's lifetime must end before ReleaseBuffer() below. + pdfium::span dest_buf = wstr.GetBuffer(dest_len); + FXSYS_MultiByteToWideChar(FX_CODEPAGE_DefANSI, 0, bstr.unterminated_c_str(), + src_len, dest_buf.data(), dest_len); + } + wstr.ReleaseBuffer(dest_len); + return wstr; } // static -- cgit v1.2.3