summaryrefslogtreecommitdiff
path: root/fpdfsdk
diff options
context:
space:
mode:
authorJane Liu <janeliulwq@google.com>2017-07-19 13:10:50 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-07-19 19:09:39 +0000
commit67ccef73bf664b7cdb4c6eed7acbaa4163c22a80 (patch)
tree718061bc21fd52eab1bc70a8b9be97585f1d79f8 /fpdfsdk
parenteed247e9cb3b0e9ce5dcb8bf6ee7673c9dd3e544 (diff)
downloadpdfium-67ccef73bf664b7cdb4c6eed7acbaa4163c22a80.tar.xz
Use CFX_WideString in CPDF_NameTree functions to strip BOMchromium/3162
PDFium doesn't strip BOMs during parsing, but we should strip BOMs when retrieving parsed strings in CPDF_NameTree to ensure consistency and appropriate function behavior. See the bug for more info. As outlined in Bug=pdfium:593, the solution is to call GetUnicodeText() instead of GetString(). I added a GetUnicodeTextAt() function in CPDF_Array, which is symmetrical to GetUnicodeTextFor() in CPDF_Dictionary. I then changed the input variable types to CPDF_NameTree functions to be CFX_WideString instead of CFX_ByteString, and modified all the calls to them. I also added a unit test for nametree, which would fail prior to this change. Nametrees with non-unicode names are already tested by embedder tests. Bug=pdfium:820 Change-Id: Id69d7343632f83d1f5180348c0eea290f478183f Reviewed-on: https://pdfium-review.googlesource.com/8091 Reviewed-by: dsinclair <dsinclair@chromium.org> Commit-Queue: Jane Liu <janeliulwq@google.com>
Diffstat (limited to 'fpdfsdk')
-rw-r--r--fpdfsdk/cpdfsdk_formfillenvironment.cpp5
-rw-r--r--fpdfsdk/fpdfattachment.cpp2
-rw-r--r--fpdfsdk/fpdfview.cpp7
-rw-r--r--fpdfsdk/javascript/Document.cpp3
4 files changed, 8 insertions, 9 deletions
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index b0ee903ead..de7947556d 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -603,10 +603,9 @@ void CPDFSDK_FormFillEnvironment::ProcJavascriptFun() {
CPDF_DocJSActions docJS(pPDFDoc);
int iCount = docJS.CountJSActions();
for (int i = 0; i < iCount; i++) {
- CFX_ByteString csJSName;
+ CFX_WideString csJSName;
CPDF_Action jsAction = docJS.GetJSActionAndName(i, &csJSName);
- GetActionHandler()->DoAction_JavaScript(
- jsAction, CFX_WideString::FromLocal(csJSName.AsStringC()), this);
+ GetActionHandler()->DoAction_JavaScript(jsAction, csJSName, this);
}
}
diff --git a/fpdfsdk/fpdfattachment.cpp b/fpdfsdk/fpdfattachment.cpp
index 337ab35e0f..7d8cce736b 100644
--- a/fpdfsdk/fpdfattachment.cpp
+++ b/fpdfsdk/fpdfattachment.cpp
@@ -30,7 +30,7 @@ DLLEXPORT FPDF_ATTACHMENT STDCALL FPDFDoc_GetAttachment(FPDF_DOCUMENT document,
if (static_cast<size_t>(index) >= nameTree.GetCount())
return nullptr;
- CFX_ByteString csName;
+ CFX_WideString csName;
return nameTree.LookupValueAndName(index, &csName);
}
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 06e72b3a71..7dbaf7f9e7 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -1322,7 +1322,7 @@ DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
return nullptr;
CPDF_NameTree name_tree(pDoc, "Dests");
- return name_tree.LookupNamedDest(pDoc, name);
+ return name_tree.LookupNamedDest(pDoc, PDF_DecodeText(CFX_ByteString(name)));
}
#ifdef PDF_ENABLE_XFA
@@ -1398,6 +1398,7 @@ DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
CPDF_Object* pDestObj = nullptr;
CFX_ByteString bsName;
+ CFX_WideString wsName;
CPDF_NameTree nameTree(pDoc, "Dests");
int count = nameTree.GetCount();
if (index >= count) {
@@ -1421,8 +1422,9 @@ DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
break;
i++;
}
+ wsName = PDF_DecodeText(bsName);
} else {
- pDestObj = nameTree.LookupValueAndName(index, &bsName);
+ pDestObj = nameTree.LookupValueAndName(index, &wsName);
}
if (!pDestObj)
return nullptr;
@@ -1434,7 +1436,6 @@ DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
if (!pDestObj->IsArray())
return nullptr;
- CFX_WideString wsName = PDF_DecodeText(bsName);
CFX_ByteString utf16Name = wsName.UTF16LE_Encode();
int len = utf16Name.GetLength();
if (!buffer) {
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index d5b075da62..ba4b2ae622 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -1594,13 +1594,12 @@ bool Document::gotoNamedDest(CJS_Runtime* pRuntime,
return false;
}
CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
- CFX_ByteString utf8Name = wideName.UTF8Encode();
CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
if (!pDocument)
return false;
CPDF_NameTree nameTree(pDocument, "Dests");
- CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, utf8Name);
+ CPDF_Array* destArray = nameTree.LookupNamedDest(pDocument, wideName);
if (!destArray)
return false;