| Index: core/src/fpdfdoc/doc_form.cpp | 
| diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp | 
| index 460a44a7dffea28731e6dad33d3796e7f7429e46..9252e073e047c53ead4c333cbb9904cee2110fc7 100644 | 
| --- a/core/src/fpdfdoc/doc_form.cpp | 
| +++ b/core/src/fpdfdoc/doc_form.cpp | 
| @@ -8,8 +8,35 @@ | 
| #include "core/src/fpdfdoc/doc_utils.h" | 
| #include "third_party/base/stl_util.h" | 
|  | 
| +namespace { | 
| + | 
| const int nMaxRecursion = 32; | 
|  | 
| +const struct SupportFieldEncoding { | 
| +  const FX_CHAR* m_name; | 
| +  FX_WORD m_codePage; | 
| +} g_fieldEncoding[] = { | 
| +    {"BigFive", 950}, | 
| +    {"GBK", 936}, | 
| +    {"Shift-JIS", 932}, | 
| +    {"UHC", 949}, | 
| +}; | 
| + | 
| +CFX_WideString FPDFDOC_FDF_GetFieldValue(const CPDF_Dictionary& pFieldDict, | 
| +                                         const CFX_ByteString& bsEncoding) { | 
| +  const CFX_ByteString csBValue = pFieldDict.GetStringBy("V"); | 
| +  for (const auto& encoding : g_fieldEncoding) { | 
| +    if (bsEncoding == encoding.m_name) | 
| +      return CFX_WideString::FromCodePage(csBValue, encoding.m_codePage); | 
| +  } | 
| +  CFX_ByteString csTemp = csBValue.Left(2); | 
| +  if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") | 
| +    return PDF_DecodeText(csBValue); | 
| +  return CFX_WideString::FromLocal(csBValue); | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| class CFieldNameExtractor { | 
| public: | 
| explicit CFieldNameExtractor(const CFX_WideString& full_name) { | 
| @@ -1088,39 +1115,7 @@ CFDF_Document* CPDF_InterForm::ExportToFDF( | 
| } | 
| return pDoc; | 
| } | 
| -const struct _SupportFieldEncoding { | 
| -  const FX_CHAR* m_name; | 
| -  int32_t m_codePage; | 
| -} g_fieldEncoding[] = { | 
| -    {"BigFive", 950}, | 
| -    {"GBK", 936}, | 
| -    {"Shift-JIS", 932}, | 
| -    {"UHC", 949}, | 
| -}; | 
| -static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary* pFieldDict, | 
| -                                      CFX_WideString& csValue, | 
| -                                      CFX_ByteString& bsEncoding) { | 
| -  CFX_ByteString csBValue = pFieldDict->GetStringBy("V"); | 
| -  int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]); | 
| -  int32_t i = 0; | 
| -  for (; i < iCount; ++i) | 
| -    if (bsEncoding == g_fieldEncoding[i].m_name) { | 
| -      break; | 
| -    } | 
| -  if (i < iCount) { | 
| -    CFX_CharMap* pCharMap = | 
| -        CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage); | 
| -    FXSYS_assert(pCharMap); | 
| -    csValue.ConvertFrom(csBValue, pCharMap); | 
| -    return; | 
| -  } | 
| -  CFX_ByteString csTemp = csBValue.Left(2); | 
| -  if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") { | 
| -    csValue = PDF_DecodeText(csBValue); | 
| -  } else { | 
| -    csValue = CFX_WideString::FromLocal(csBValue); | 
| -  } | 
| -} | 
| + | 
| void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, | 
| const CFX_WideString& parent_name, | 
| FX_BOOL bNotify, | 
| @@ -1150,8 +1145,8 @@ void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, | 
| if (!pField) { | 
| return; | 
| } | 
| -  CFX_WideString csWValue; | 
| -  FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding); | 
| +  CFX_WideString csWValue = | 
| +      FPDFDOC_FDF_GetFieldValue(*pFieldDict, m_bsEncoding); | 
| int iType = pField->GetFieldType(); | 
| if (bNotify && m_pFormNotify) { | 
| int iRet = 0; | 
|  |