| Index: xfa/fxfa/parser/xfa_object_imp.cpp | 
| diff --git a/xfa/fxfa/parser/xfa_object_imp.cpp b/xfa/fxfa/parser/xfa_object_imp.cpp | 
| index d3d076d302ecbc8471523768fa34f54613b82b60..fe08c0e42bf8a9b18d1f6e757b426b0cfa5a722d 100644 | 
| --- a/xfa/fxfa/parser/xfa_object_imp.cpp | 
| +++ b/xfa/fxfa/parser/xfa_object_imp.cpp | 
| @@ -1430,22 +1430,22 @@ void CXFA_Node::Script_Attribute_String(CFXJSE_Value* pValue, | 
| FX_BOOL bSetting, | 
| XFA_ATTRIBUTE eAttribute) { | 
| if (bSetting) { | 
| -    CFX_ByteString szValue; | 
| -    pValue->ToString(szValue); | 
| -    CFX_WideString wsValue = CFX_WideString::FromUTF8(szValue.AsStringC()); | 
| +    CFX_WideString wsValue = pValue->ToWideString(); | 
| SetAttribute(eAttribute, wsValue.AsStringC(), true); | 
| if (eAttribute == XFA_ATTRIBUTE_Use && GetClassID() == XFA_ELEMENT_Desc) { | 
| -      CFX_WideString wsUseVal = wsValue, wsID, wsSOM; | 
| CXFA_Node* pTemplateNode = | 
| ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Template)); | 
| CXFA_Node* pProtoRoot = | 
| pTemplateNode->GetFirstChildByClass(XFA_ELEMENT_Subform) | 
| ->GetFirstChildByClass(XFA_ELEMENT_Proto); | 
| -      if (!wsUseVal.IsEmpty()) { | 
| -        if (wsUseVal[0] == '#') { | 
| -          wsID = CFX_WideString(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1); | 
| + | 
| +      CFX_WideString wsID; | 
| +      CFX_WideString wsSOM; | 
| +      if (!wsValue.IsEmpty()) { | 
| +        if (wsValue[0] == '#') { | 
| +          wsID = CFX_WideString(wsValue.c_str() + 1, wsValue.GetLength() - 1); | 
| } else { | 
| -          wsSOM = wsUseVal; | 
| +          wsSOM = wsValue; | 
| } | 
| } | 
| CXFA_Node* pProtoNode = nullptr; | 
| @@ -1541,20 +1541,15 @@ void CXFA_Node::Script_Som_Message(CFXJSE_Value* pValue, | 
| bNew = TRUE; | 
| } | 
| if (bSetting) { | 
| -    CFX_ByteString bsMessage; | 
| -    pValue->ToString(bsMessage); | 
| switch (iMessageType) { | 
| case XFA_SOM_ValidationMessage: | 
| -        validate.SetScriptMessageText( | 
| -            CFX_WideString::FromUTF8(bsMessage.AsStringC())); | 
| +        validate.SetScriptMessageText(pValue->ToWideString()); | 
| break; | 
| case XFA_SOM_FormatMessage: | 
| -        validate.SetFormatMessageText( | 
| -            CFX_WideString::FromUTF8(bsMessage.AsStringC())); | 
| +        validate.SetFormatMessageText(pValue->ToWideString()); | 
| break; | 
| case XFA_SOM_MandatoryMessage: | 
| -        validate.SetNullMessageText( | 
| -            CFX_WideString::FromUTF8(bsMessage.AsStringC())); | 
| +        validate.SetNullMessageText(pValue->ToWideString()); | 
| break; | 
| default: | 
| break; | 
| @@ -1618,11 +1613,10 @@ void CXFA_Node::Script_Som_DefaultValue(CFXJSE_Value* pValue, | 
| return; | 
| } | 
| if (bSetting) { | 
| -    CFX_ByteString newValue; | 
| +    CFX_WideString wsNewValue; | 
| if (!(pValue && (pValue->IsNull() || pValue->IsUndefined()))) | 
| -      pValue->ToString(newValue); | 
| +      wsNewValue = pValue->ToWideString(); | 
|  | 
| -    CFX_WideString wsNewValue = CFX_WideString::FromUTF8(newValue.AsStringC()); | 
| CFX_WideString wsFormatValue(wsNewValue); | 
| CXFA_WidgetData* pContainerWidgetData = nullptr; | 
| if (GetPacketID() == XFA_XDPPACKET_Datasets) { | 
| @@ -1688,7 +1682,7 @@ void CXFA_Node::Script_Boolean_Value(CFXJSE_Value* pValue, | 
| if (bSetting) { | 
| CFX_ByteString newValue; | 
| if (!(pValue && (pValue->IsNull() || pValue->IsUndefined()))) | 
| -      pValue->ToString(newValue); | 
| +      newValue = pValue->ToString(); | 
|  | 
| int32_t iValue = FXSYS_atoi(newValue.c_str()); | 
| CFX_WideString wsNewValue(iValue == 0 ? L"0" : L"1"); | 
| @@ -1756,13 +1750,14 @@ const XFA_ExecEventParaInfo* GetEventParaInfoByName( | 
| } while (iStart <= iEnd); | 
| return nullptr; | 
| } | 
| -void XFA_STRING_TO_RGB(CFX_WideString& strRGB, | 
| +void XFA_STRING_TO_RGB(const CFX_WideString& strRGB, | 
| int32_t& r, | 
| int32_t& g, | 
| int32_t& b) { | 
| r = 0; | 
| g = 0; | 
| b = 0; | 
| + | 
| FX_WCHAR zero = '0'; | 
| int32_t iIndex = 0; | 
| int32_t iLen = strRGB.GetLength(); | 
| @@ -1799,13 +1794,11 @@ void CXFA_Node::Script_Som_BorderColor(CFXJSE_Value* pValue, | 
| } | 
| CXFA_Border border = pWidgetData->GetBorder(TRUE); | 
| int32_t iSize = border.CountEdges(); | 
| -  CFX_WideString strColor; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    strColor = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    int32_t r = 0, g = 0, b = 0; | 
| -    XFA_STRING_TO_RGB(strColor, r, g, b); | 
| +    int32_t r = 0; | 
| +    int32_t g = 0; | 
| +    int32_t b = 0; | 
| +    XFA_STRING_TO_RGB(pValue->ToWideString(), r, g, b); | 
| FX_ARGB rgb = ArgbEncode(100, r, g, b); | 
| for (int32_t i = 0; i < iSize; ++i) { | 
| CXFA_Edge edge = border.GetEdge(i); | 
| @@ -1816,6 +1809,7 @@ void CXFA_Node::Script_Som_BorderColor(CFXJSE_Value* pValue, | 
| FX_ARGB color = edge.GetColor(); | 
| int32_t a, r, g, b; | 
| ArgbDecode(color, a, r, g, b); | 
| +    CFX_WideString strColor; | 
| strColor.Format(L"%d,%d,%d", r, g, b); | 
| pValue->SetString(FX_UTF8Encode(strColor).AsStringC()); | 
| } | 
| @@ -1831,9 +1825,7 @@ void CXFA_Node::Script_Som_BorderWidth(CFXJSE_Value* pValue, | 
| int32_t iSize = border.CountEdges(); | 
| CFX_WideString wsThickness; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsThickness = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| +    wsThickness = pValue->ToWideString(); | 
| for (int32_t i = 0; i < iSize; ++i) { | 
| CXFA_Edge edge = border.GetEdge(i); | 
| CXFA_Measurement thickness(wsThickness.AsStringC()); | 
| @@ -1859,19 +1851,21 @@ void CXFA_Node::Script_Som_FillColor(CFXJSE_Value* pValue, | 
| if (!pNode) { | 
| return; | 
| } | 
| -  CFX_WideString wsColor; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsColor = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    int32_t r, g, b; | 
| -    XFA_STRING_TO_RGB(wsColor, r, g, b); | 
| +    int32_t r; | 
| +    int32_t g; | 
| +    int32_t b; | 
| +    XFA_STRING_TO_RGB(pValue->ToWideString(), r, g, b); | 
| FX_ARGB color = ArgbEncode(0xff, r, g, b); | 
| borderfill.SetColor(color); | 
| } else { | 
| FX_ARGB color = borderfill.GetColor(); | 
| -    int32_t a, r, g, b; | 
| +    int32_t a; | 
| +    int32_t r; | 
| +    int32_t g; | 
| +    int32_t b; | 
| ArgbDecode(color, a, r, g, b); | 
| +    CFX_WideString wsColor; | 
| wsColor.Format(L"%d,%d,%d", r, g, b); | 
| pValue->SetString(FX_UTF8Encode(wsColor).AsStringC()); | 
| } | 
| @@ -1900,10 +1894,7 @@ void CXFA_Node::Script_Draw_DefaultValue(CFXJSE_Value* pValue, | 
| ASSERT(pWidgetData); | 
| XFA_ELEMENT uiType = pWidgetData->GetUIType(); | 
| if (uiType == XFA_ELEMENT_Text) { | 
| -        CFX_ByteString newValue; | 
| -        pValue->ToString(newValue); | 
| -        CFX_WideString wsNewValue = | 
| -            CFX_WideString::FromUTF8(newValue.AsStringC()); | 
| +        CFX_WideString wsNewValue = pValue->ToWideString(); | 
| CFX_WideString wsFormatValue(wsNewValue); | 
| SetScriptContent(wsNewValue, wsFormatValue, true, TRUE); | 
| } | 
| @@ -1933,11 +1924,10 @@ void CXFA_Node::Script_Field_DefaultValue(CFXJSE_Value* pValue, | 
| pWidgetData->m_bPreNull = pWidgetData->m_bIsNull; | 
| pWidgetData->m_bIsNull = FALSE; | 
| } | 
| -    CFX_ByteString newValue; | 
| +    CFX_WideString wsNewText; | 
| if (!(pValue && (pValue->IsNull() || pValue->IsUndefined()))) | 
| -      pValue->ToString(newValue); | 
| +      wsNewText = pValue->ToWideString(); | 
|  | 
| -    CFX_WideString wsNewText = CFX_WideString::FromUTF8(newValue.AsStringC()); | 
| CXFA_Node* pUIChild = pWidgetData->GetUIChild(); | 
| if (pUIChild->GetClassID() == XFA_ELEMENT_NumericEdit) { | 
| int32_t iLeadDigits = 0; | 
| @@ -1992,13 +1982,10 @@ void CXFA_Node::Script_Field_EditValue(CFXJSE_Value* pValue, | 
| if (!pWidgetData) { | 
| return; | 
| } | 
| -  CFX_WideString wsValue; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    pWidgetData->SetValue(wsValue, XFA_VALUEPICTURE_Edit); | 
| +    pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Edit); | 
| } else { | 
| +    CFX_WideString wsValue; | 
| pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Edit); | 
| pValue->SetString(FX_UTF8Encode(wsValue).AsStringC()); | 
| } | 
| @@ -2015,19 +2002,21 @@ void CXFA_Node::Script_Som_FontColor(CFXJSE_Value* pValue, | 
| if (!pNode) { | 
| return; | 
| } | 
| -  CFX_WideString wsColor; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsColor = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    int32_t r, g, b; | 
| -    XFA_STRING_TO_RGB(wsColor, r, g, b); | 
| +    int32_t r; | 
| +    int32_t g; | 
| +    int32_t b; | 
| +    XFA_STRING_TO_RGB(pValue->ToWideString(), r, g, b); | 
| FX_ARGB color = ArgbEncode(0xff, r, g, b); | 
| font.SetColor(color); | 
| } else { | 
| FX_ARGB color = font.GetColor(); | 
| -    int32_t a, r, g, b; | 
| +    int32_t a; | 
| +    int32_t r; | 
| +    int32_t g; | 
| +    int32_t b; | 
| ArgbDecode(color, a, r, g, b); | 
| +    CFX_WideString wsColor; | 
| wsColor.Format(L"%d,%d,%d", r, g, b); | 
| pValue->SetString(FX_UTF8Encode(wsColor).AsStringC()); | 
| } | 
| @@ -2044,13 +2033,10 @@ void CXFA_Node::Script_Field_FormattedValue(CFXJSE_Value* pValue, | 
| if (!pWidgetData) { | 
| return; | 
| } | 
| -  CFX_WideString wsValue; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    pWidgetData->SetValue(wsValue, XFA_VALUEPICTURE_Display); | 
| +    pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Display); | 
| } else { | 
| +    CFX_WideString wsValue; | 
| pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Display); | 
| pValue->SetString(FX_UTF8Encode(wsValue).AsStringC()); | 
| } | 
| @@ -2063,19 +2049,15 @@ void CXFA_Node::Script_Som_Mandatory(CFXJSE_Value* pValue, | 
| return; | 
| } | 
| CXFA_Validate validate = pWidgetData->GetValidate(TRUE); | 
| -  CFX_WideString wsValue; | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC()); | 
| -    validate.SetNullTest(wsValue); | 
| +    validate.SetNullTest(pValue->ToWideString()); | 
| } else { | 
| int32_t iValue = validate.GetNullTest(); | 
| const XFA_ATTRIBUTEENUMINFO* pInfo = | 
| XFA_GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue); | 
| -    if (pInfo) { | 
| +    CFX_WideString wsValue; | 
| +    if (pInfo) | 
| wsValue = pInfo->pName; | 
| -    } | 
| pValue->SetString(FX_UTF8Encode(wsValue).AsStringC()); | 
| } | 
| } | 
| @@ -2330,11 +2312,8 @@ void CXFA_Node::Script_ExclGroup_DefaultAndRawValue(CFXJSE_Value* pValue, | 
| return; | 
| } | 
| if (bSetting) { | 
| -    CFX_ByteString bsValue; | 
| -    pValue->ToString(bsValue); | 
| -    pWidgetData->SetSelectedMemberByValue( | 
| -        CFX_WideString::FromUTF8(bsValue.AsStringC()).AsStringC(), true, TRUE, | 
| -        TRUE); | 
| +    pWidgetData->SetSelectedMemberByValue(pValue->ToWideString().AsStringC(), | 
| +                                          true, TRUE, TRUE); | 
| } else { | 
| CFX_WideString wsValue = GetScriptContent(TRUE); | 
| XFA_VERSION curVersion = GetDocument()->GetCurVersionMode(); | 
| @@ -2529,10 +2508,7 @@ void CXFA_Node::Script_Subform_Locale(CFXJSE_Value* pValue, | 
| FX_BOOL bSetting, | 
| XFA_ATTRIBUTE eAttribute) { | 
| if (bSetting) { | 
| -    CFX_ByteString bsLocaleName; | 
| -    pValue->ToString(bsLocaleName); | 
| -    SetCData(XFA_ATTRIBUTE_Locale, | 
| -             CFX_WideString::FromUTF8(bsLocaleName.AsStringC()), true, TRUE); | 
| +    SetCData(XFA_ATTRIBUTE_Locale, pValue->ToWideString(), true, TRUE); | 
| } else { | 
| CFX_WideString wsLocaleName; | 
| GetLocaleName(wsLocaleName); | 
| @@ -3386,10 +3362,7 @@ void CXFA_Node::Script_Form_Checksum(CFXJSE_Value* pValue, | 
| FX_BOOL bSetting, | 
| XFA_ATTRIBUTE eAttribute) { | 
| if (bSetting) { | 
| -    CFX_ByteString bsChecksum; | 
| -    pValue->ToString(bsChecksum); | 
| -    SetAttribute(XFA_ATTRIBUTE_Checksum, | 
| -                 CFX_WideString::FromUTF8(bsChecksum.AsStringC()).AsStringC()); | 
| +    SetAttribute(XFA_ATTRIBUTE_Checksum, pValue->ToWideString().AsStringC()); | 
| } else { | 
| CFX_WideString wsChecksum; | 
| GetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum, FALSE); | 
| @@ -3452,13 +3425,10 @@ void CXFA_Node::Script_Packet_Content(CFXJSE_Value* pValue, | 
| FX_BOOL bSetting, | 
| XFA_ATTRIBUTE eAttribute) { | 
| if (bSetting) { | 
| -    CFX_ByteString bsNewContent; | 
| -    pValue->ToString(bsNewContent); | 
| CFDE_XMLNode* pXMLNode = GetXMLMappingNode(); | 
| if (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element) { | 
| CFDE_XMLElement* pXMLElement = static_cast<CFDE_XMLElement*>(pXMLNode); | 
| -      pXMLElement->SetTextData( | 
| -          CFX_WideString::FromUTF8(bsNewContent.AsStringC())); | 
| +      pXMLElement->SetTextData(pValue->ToWideString()); | 
| } | 
| } else { | 
| CFX_WideString wsTextData; | 
|  |