diff --git a/fxjs/cfxjse_engine.cpp b/fxjs/cfxjse_engine.cpp
index b9cd502..179866b 100644
--- a/fxjs/cfxjse_engine.cpp
+++ b/fxjs/cfxjse_engine.cpp
@@ -738,11 +738,9 @@
                                 lpNodeHelper->NodeIsProperty(refNode), true);
 }
 
-void CFXJSE_Engine::GetSomExpression(CXFA_Node* refNode,
-                                     WideString& wsExpression) {
+WideString CFXJSE_Engine::GetSomExpression(CXFA_Node* refNode) {
   CXFA_NodeHelper* lpNodeHelper = m_ResolveProcessor->GetNodeHelper();
-  wsExpression =
-      lpNodeHelper->GetNameExpression(refNode, true, XFA_LOGIC_Transparent);
+  return lpNodeHelper->GetNameExpression(refNode, true, XFA_LOGIC_Transparent);
 }
 
 void CFXJSE_Engine::SetNodesOfRunScript(std::vector<CXFA_Node*>* pArray) {
diff --git a/fxjs/cfxjse_engine.h b/fxjs/cfxjse_engine.h
index 777921d..0b360bd 100644
--- a/fxjs/cfxjse_engine.h
+++ b/fxjs/cfxjse_engine.h
@@ -70,7 +70,7 @@
 
   int32_t GetIndexByName(CXFA_Node* refNode);
   int32_t GetIndexByClassName(CXFA_Node* refNode);
-  void GetSomExpression(CXFA_Node* refNode, WideString& wsExpression);
+  WideString GetSomExpression(CXFA_Node* refNode);
 
   void SetNodesOfRunScript(std::vector<CXFA_Node*>* pArray);
   void AddNodesOfRunScript(CXFA_Node* pNode);
diff --git a/fxjs/xfa/cjx_tree.cpp b/fxjs/xfa/cjx_tree.cpp
index 1a20611..4a7a2fc 100644
--- a/fxjs/xfa/cjx_tree.cpp
+++ b/fxjs/xfa/cjx_tree.cpp
@@ -196,8 +196,7 @@
     return;
   }
 
-  WideString wsSOMExpression;
-  GetXFAObject()->GetSOMExpression(wsSOMExpression);
+  WideString wsSOMExpression = GetXFAObject()->GetSOMExpression();
   pValue->SetString(wsSOMExpression.UTF8Encode().AsStringView());
 }
 
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 6f782b3..b97b218 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -200,9 +200,7 @@
   if (!pAppProvider)
     return;
 
-  WideString wsSomField;
-  pAcc->GetNode()->GetSOMExpression(wsSomField);
-
+  WideString wsSomField = pAcc->GetNode()->GetSOMExpression();
   pAppProvider->MsgBox(WideString::Format(L"%ls can not contain %ls",
                                           wsText.c_str(), wsSomField.c_str()),
                        pAppProvider->GetAppTitle(), XFA_MBICON_Error,
diff --git a/xfa/fxfa/parser/cxfa_object.cpp b/xfa/fxfa/parser/cxfa_object.cpp
index 93d3124..666186c 100644
--- a/xfa/fxfa/parser/cxfa_object.cpp
+++ b/xfa/fxfa/parser/cxfa_object.cpp
@@ -31,12 +31,12 @@
 
 CXFA_Object::~CXFA_Object() {}
 
-void CXFA_Object::GetSOMExpression(WideString& wsSOMExpression) {
+WideString CXFA_Object::GetSOMExpression() {
   CFXJSE_Engine* pScriptContext = m_pDocument->GetScriptContext();
   if (!pScriptContext)
-    return;
+    return WideString();
 
-  pScriptContext->GetSomExpression(ToNode(this), wsSOMExpression);
+  return pScriptContext->GetSomExpression(ToNode(this));
 }
 
 CXFA_Node* CXFA_Object::AsNode() {
diff --git a/xfa/fxfa/parser/cxfa_object.h b/xfa/fxfa/parser/cxfa_object.h
index ce9ce93..0b17273 100644
--- a/xfa/fxfa/parser/cxfa_object.h
+++ b/xfa/fxfa/parser/cxfa_object.h
@@ -75,7 +75,7 @@
   WideStringView GetClassName() const { return m_elementName; }
   uint32_t GetClassHashCode() const { return m_elementNameHash; }
 
-  void GetSOMExpression(WideString& wsSOMExpression);
+  WideString GetSOMExpression();
 
  protected:
   CXFA_Object(CXFA_Document* pDocument,
