From 67ccef73bf664b7cdb4c6eed7acbaa4163c22a80 Mon Sep 17 00:00:00 2001 From: Jane Liu Date: Wed, 19 Jul 2017 13:10:50 -0400 Subject: Use CFX_WideString in CPDF_NameTree functions to strip BOM 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 Commit-Queue: Jane Liu --- xfa/fxfa/cxfa_ffdoc.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'xfa') diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp index 01c570adbe..326fc7f228 100644 --- a/xfa/fxfa/cxfa_ffdoc.cpp +++ b/xfa/fxfa/cxfa_ffdoc.cpp @@ -365,13 +365,12 @@ CFX_RetainPtr CXFA_FFDoc::GetPDFNamedImage( return nullptr; CPDF_NameTree nametree(pXFAImages); - CFX_ByteString bsName = PDF_EncodeText(wsName.c_str(), wsName.GetLength()); - CPDF_Object* pObject = nametree.LookupValue(bsName); + CPDF_Object* pObject = nametree.LookupValue(CFX_WideString(wsName)); if (!pObject) { for (size_t i = 0; i < nametree.GetCount(); i++) { - CFX_ByteString bsTemp; - CPDF_Object* pTempObject = nametree.LookupValueAndName(i, &bsTemp); - if (bsTemp == bsName) { + CFX_WideString wsTemp; + CPDF_Object* pTempObject = nametree.LookupValueAndName(i, &wsTemp); + if (wsTemp == wsName) { pObject = pTempObject; break; } -- cgit v1.2.3