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 <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit a56e5434a4ed453b55b8f060ed18404d77a9fb10)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139842
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/sc/inc/addincol.hxx b/sc/inc/addincol.hxx
index 9366e31..05ceea27 100644
--- a/sc/inc/addincol.hxx
+++ b/sc/inc/addincol.hxx
@@ -42,6 +42,7 @@ namespace com::sun::star::uno { class XInterface; }
class SfxObjectShell;
class ScUnoAddInFuncData;
class ScFuncDesc;
class ScDocument;
typedef std::unordered_map< OUString, const ScUnoAddInFuncData* > ScAddInHashMap;
@@ -188,6 +189,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;
@@ -201,7 +203,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 126a0f9..b0cadc3 100644
--- a/sc/source/core/tool/addincol.cxx
+++ b/sc/source/core/tool/addincol.cxx
@@ -58,6 +58,7 @@
#include <funcdesc.hxx>
#include <svl/sharedstring.hxx>
#include <formulaopt.hxx>
#include <document.hxx>
#include <memory>
using namespace com::sun::star;
@@ -1228,8 +1229,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 ),
@@ -1582,13 +1584,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 1a0eed8..f0dee4b 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -2710,7 +2710,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 );