diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/include/fxcrt/fx_string.h | 2 | ||||
-rw-r--r-- | core/src/fxcrt/fx_basic_wstring.cpp | 16 | ||||
-rw-r--r-- | core/src/fxcrt/fx_basic_wstring_unittest.cpp | 29 |
3 files changed, 36 insertions, 11 deletions
diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h index eae1c15a04..33634f8379 100644 --- a/core/include/fxcrt/fx_string.h +++ b/core/include/fxcrt/fx_string.h @@ -774,7 +774,7 @@ public: CFX_ByteString UTF8Encode() const; - CFX_ByteString UTF16LE_Encode(FX_BOOL bTerminate = TRUE) const; + CFX_ByteString UTF16LE_Encode() const; void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL); protected: diff --git a/core/src/fxcrt/fx_basic_wstring.cpp b/core/src/fxcrt/fx_basic_wstring.cpp index 0827fb6f34..0945d2f1c5 100644 --- a/core/src/fxcrt/fx_basic_wstring.cpp +++ b/core/src/fxcrt/fx_basic_wstring.cpp @@ -323,25 +323,21 @@ CFX_ByteString CFX_WideString::UTF8Encode() const { return FX_UTF8Encode(*this); } -CFX_ByteString CFX_WideString::UTF16LE_Encode(FX_BOOL bTerminate) const +CFX_ByteString CFX_WideString::UTF16LE_Encode() const { if (m_pData == NULL) { - return bTerminate ? CFX_ByteString(FX_BSTRC("\0\0")) : CFX_ByteString(); + return CFX_ByteString(FX_BSTRC("\0\0")); } int len = m_pData->m_nDataLength; CFX_ByteString result; - FX_LPSTR buffer = result.GetBuffer(len * 2 + (bTerminate ? 2 : 0)); + FX_LPSTR buffer = result.GetBuffer(len * 2 + 2); for (int i = 0; i < len; i ++) { buffer[i * 2] = m_pData->m_String[i] & 0xff; buffer[i * 2 + 1] = m_pData->m_String[i] >> 8; } - if (bTerminate) { - buffer[len * 2] = 0; - buffer[len * 2 + 1] = 0; - result.ReleaseBuffer(len * 2 + 2); - } else { - result.ReleaseBuffer(len * 2); - } + buffer[len * 2] = 0; + buffer[len * 2 + 1] = 0; + result.ReleaseBuffer(len * 2 + 2); return result; } void CFX_WideString::ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap) diff --git a/core/src/fxcrt/fx_basic_wstring_unittest.cpp b/core/src/fxcrt/fx_basic_wstring_unittest.cpp new file mode 100644 index 0000000000..c6e5c2f3d0 --- /dev/null +++ b/core/src/fxcrt/fx_basic_wstring_unittest.cpp @@ -0,0 +1,29 @@ +// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "../../../testing/fx_string_testhelpers.h"
+#include "../../include/fxcrt/fx_basic.h"
+
+#define ByteStringLiteral(str) CFX_ByteString(FX_BSTRC(str))
+
+TEST(fxcrt, WideStringUTF16LE_Encode) {
+ struct UTF16LEEncodeCase {
+ CFX_WideString ws;
+ CFX_ByteString bs;
+ } utf16le_encode_cases[] = {
+ { L"", ByteStringLiteral("\0\0") },
+ { L"abc", ByteStringLiteral("a\0b\0c\0\0\0") },
+ { L"abcdef", ByteStringLiteral("a\0b\0c\0d\0e\0f\0\0\0") },
+ { L"abc\0def", ByteStringLiteral("a\0b\0c\0\0\0") },
+ { L"\xaabb\xccdd", ByteStringLiteral("\xbb\xaa\xdd\xcc\0\0") },
+ { L"\x3132\x6162", ByteStringLiteral("\x32\x31\x62\x61\0\0") },
+ };
+
+ for (size_t i = 0; i < FX_ArraySize(utf16le_encode_cases); ++i) {
+ EXPECT_EQ(utf16le_encode_cases[i].bs,
+ utf16le_encode_cases[i].ws.UTF16LE_Encode())
+ << " for case number " << i;
+ }
+}
|