sc/inc/addincol.hxx              |    4 +++-
 sc/source/core/tool/addincol.cxx |    8 +++++---
 sc/source/core/tool/interpr4.cxx |    2 +-
 3 files changed, 9 insertions(+), 5 deletions(-)

New commits:
commit a56e5434a4ed453b55b8f060ed18404d77a9fb10
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Wed Sep 14 00:19:04 2022 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Wed Sep 14 09:01:20 2022 +0200

    Resolves: tdf#150926 Add-In result svl::SharedString needs to be interned
    
    Change-Id: If582e7e1bf818dcf9eaddd5313aa21f5768a578f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139886
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/sc/inc/addincol.hxx b/sc/inc/addincol.hxx
index ee5ecb44e300..2ae05aa31585 100644
--- a/sc/inc/addincol.hxx
+++ b/sc/inc/addincol.hxx
@@ -44,6 +44,7 @@ class SfxObjectShell;
 class ScUnoAddInFuncData;
 class ScFuncDesc;
 class LanguageTag;
+class ScDocument;
 
 typedef std::unordered_map< OUString, const ScUnoAddInFuncData* > 
ScAddInHashMap;
 
@@ -198,6 +199,7 @@ private:
     css::uno::Sequence<css::uno::Any>         aArgs;
     css::uno::Sequence<css::uno::Any>         aVarArg;
     css::uno::Reference<css::uno::XInterface> xCaller;
+    ScDocument&                 mrDoc;
     bool                        bValidCount;
     // result:
     FormulaError                nErrCode;
@@ -211,7 +213,7 @@ private:
 
 public:
                     // exact name
-                    ScUnoAddInCall( ScUnoAddInCollection& rColl, const 
OUString& rName,
+                    ScUnoAddInCall( ScDocument& rDoc, ScUnoAddInCollection& 
rColl, const OUString& rName,
                                     tools::Long nParamCount );
                     ~ScUnoAddInCall();
 
diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx
index 1ffb1e5bc1d7..bf7d8652de1b 100644
--- a/sc/source/core/tool/addincol.cxx
+++ b/sc/source/core/tool/addincol.cxx
@@ -61,6 +61,7 @@
 #include <svl/sharedstring.hxx>
 #include <formulaopt.hxx>
 #include <compiler.hxx>
+#include <document.hxx>
 #include <memory>
 
 using namespace com::sun::star;
@@ -1283,8 +1284,9 @@ bool ScUnoAddInCollection::FillFunctionDescFromData( 
const ScUnoAddInFuncData& r
     return true;
 }
 
-ScUnoAddInCall::ScUnoAddInCall( ScUnoAddInCollection& rColl, const OUString& 
rName,
+ScUnoAddInCall::ScUnoAddInCall( ScDocument& rDoc, ScUnoAddInCollection& rColl, 
const OUString& rName,
                                 tools::Long nParamCount ) :
+    mrDoc( rDoc ),
     bValidCount( false ),
     nErrCode( FormulaError::NoCode ),      // before function was called
     bHasString( true ),
@@ -1637,13 +1639,13 @@ void ScUnoAddInCall::SetResult( const uno::Any& rNewRes 
)
                             for (sal_Int32 nCol=0; nCol<nColCount; nCol++)
                             {
                                 xMatrix->PutString(
-                                    svl::SharedString(pColArr[nCol]),
+                                    
mrDoc.GetSharedStringPool().intern(pColArr[nCol]),
                                     static_cast<SCSIZE>(nCol), 
static_cast<SCSIZE>(nRow));
                             }
                             for (sal_Int32 nCol=nColCount; nCol<nMaxColCount; 
nCol++)
                             {
                                 xMatrix->PutString(
-                                    svl::SharedString(OUString()),
+                                    svl::SharedString::getEmptyString(),
                                     static_cast<SCSIZE>(nCol), 
static_cast<SCSIZE>(nRow));
                             }
                         }
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index bace28f68a53..bc16f32badb1 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -2734,7 +2734,7 @@ void ScInterpreter::ScExternal()
         //  bLocalFirst=false in FindFunction, cFunc should be the stored
         //  internal name
 
-        ScUnoAddInCall aCall( *ScGlobal::GetAddInCollection(), aUnoName, 
nParamCount );
+        ScUnoAddInCall aCall( mrDoc, *ScGlobal::GetAddInCollection(), 
aUnoName, nParamCount );
 
         if ( !aCall.ValidParamCount() )
             SetError( FormulaError::IllegalParameter );

Reply via email to