summaryrefslogtreecommitdiff
path: root/core/fxcrt
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-08-07 17:02:12 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-08-07 17:02:12 +0000
commitc0352f4584bf738b0073114d25e81e57b490d655 (patch)
tree5c3f5a9e619f318dd5e4e34069d487b868d8992c /core/fxcrt
parentf3a3393a2f96bb8c4cc275ee67921e2b7bddf540 (diff)
downloadpdfium-c0352f4584bf738b0073114d25e81e57b490d655.tar.xz
Speculative fix for null deref above ThrowNoDefaultPropertyException
Avoid possibility of an unterminated string or nullptr by avoiding stringviews, since the non-view classes copy and always provide a suitable result. Always use %ls and widestrings in wprintf() variants, since that combination is consistent across our platforms (%s, %S, etc. have idiosyncracies). Bug: 870952 Change-Id: Ief62a42c3486e8298f9583b56e9333db1a74972a Reviewed-on: https://pdfium-review.googlesource.com/39551 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fxcrt')
-rw-r--r--core/fxcrt/widestring_unittest.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index 93f6b07e72..37d4ecd581 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -1381,6 +1381,22 @@ TEST(WideString, FormatOutOfRangeChar) {
EXPECT_NE(L"", WideString::Format(L"unsupported char '%c'", 0x00FF00FF));
}
+TEST(WideString, FormatString) {
+ // %ls and wide characters are the reliable combination across platforms.
+ EXPECT_EQ(L"", WideString::Format(L"%ls", L""));
+ EXPECT_EQ(L"", WideString::Format(L"%ls", WideString().c_str()));
+ EXPECT_EQ(L"clams", WideString::Format(L"%ls", L"clams"));
+ EXPECT_EQ(L"cla", WideString::Format(L"%.3ls", L"clams"));
+ EXPECT_EQ(L"\u043e\u043f", WideString(L"\u043e\u043f"));
+
+#if _FX_OS_ != _FX_OS_MACOSX_
+ // See https://bugs.chromium.org/p/pdfium/issues/detail?id=1132
+ EXPECT_EQ(L"\u043e\u043f", WideString::Format(L"\u043e\u043f"));
+ EXPECT_EQ(L"\u043e\u043f", WideString::Format(L"%ls", L"\u043e\u043f"));
+ EXPECT_EQ(L"\u043e", WideString::Format(L"%.1ls", L"\u043e\u043f"));
+#endif
+}
+
TEST(WideString, Empty) {
WideString empty_str;
EXPECT_TRUE(empty_str.IsEmpty());