Index: core/src/fpdfdoc/doc_bookmark.cpp |
diff --git a/core/src/fpdfdoc/doc_bookmark.cpp b/core/src/fpdfdoc/doc_bookmark.cpp |
index 9814de61bff20414fa7847194ef9c1aeb05ab3df..6ba98e655dff5e55a6ce575046a89f3ad560170e 100644 |
--- a/core/src/fpdfdoc/doc_bookmark.cpp |
+++ b/core/src/fpdfdoc/doc_bookmark.cpp |
@@ -4,7 +4,11 @@ |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+#include <vector> |
+ |
+#include "../../../third_party/base/nonstd_unique_ptr.h" |
#include "../../include/fpdfdoc/fpdf_doc.h" |
+ |
CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(const CPDF_Bookmark& parent) const |
{ |
if (!parent.m_pDict) { |
@@ -55,15 +59,18 @@ CFX_WideString CPDF_Bookmark::GetTitle() const |
return CFX_WideString(); |
} |
CFX_WideString title = pString->GetUnicodeText(); |
- FX_LPWSTR buf = title.LockBuffer(); |
int len = title.GetLength(); |
+ if (!len) { |
+ return CFX_WideString(); |
+ } |
+ nonstd::unique_ptr<std::vector<FX_WCHAR> > vec; |
+ vec.reset(new std::vector<FX_WCHAR>(len)); |
+ FX_WCHAR* buf = &vec->front(); |
for (int i = 0; i < len; i++) { |
- if (buf[i] < 0x20) { |
- buf[i] = 0x20; |
- } |
+ FX_WCHAR w = title[i]; |
+ buf[i] = w > 0x20 ? w : 0x20; |
} |
- title.ReleaseBuffer(len); |
- return title; |
+ return CFX_WideString(buf, len); |
} |
CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const |
{ |