diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2021-12-22 14:55:01 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2021-12-22 16:39:32 +0100 |
commit | 822998f1dc202aba7a558767f641687aef0c1148 (patch) | |
tree | 6474d7acf4527bcb6b8fb1a8b89e58554fd47cde /scripting/source | |
parent | 771e721837e76bdf1f85dda164f607a3d3c6c9a2 (diff) |
tdf#143582: Avoid error on clearing leftover return value of a method
SbxValue::Clear happens to not error out on clearing string and some
other types of objects, but for the rest, it calls SbxValue::Put, and
the latter errors out if not CanWrite(). The original test implemented
in commit 24d24debef4cda7de702c4b470a3707f1aae3ea3 only checked string
return value, so happened to miss this problem.
See similar code in SbiRuntime::FindElement.
Change-Id: I7c17137cc9e7ee3133ee86a9f701559df66e53b6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127248
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'scripting/source')
-rw-r--r-- | scripting/source/basprov/basscript.cxx | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/scripting/source/basprov/basscript.cxx b/scripting/source/basprov/basscript.cxx index 0b411c83f180..2cc67d4feb05 100644 --- a/scripting/source/basprov/basscript.cxx +++ b/scripting/source/basprov/basscript.cxx @@ -245,7 +245,10 @@ constexpr OUStringLiteral BASSCRIPT_PROPERTY_CALLER = u"Caller"; aOldThisComponent = m_documentBasicManager->SetGlobalUNOConstant( "ThisComponent", makeAny( m_xDocumentScriptContext ) ); // tdf#143582 - clear return value of the method before calling it + const SbxFlagBits nSavFlags = m_xMethod->GetFlags(); + m_xMethod->SetFlag(SbxFlagBits::ReadWrite | SbxFlagBits::NoBroadcast); m_xMethod->Clear(); + m_xMethod->SetFlags(nSavFlags); if ( m_caller.hasElements() && m_caller[ 0 ].hasValue() ) { SbxVariableRef xCallerVar = new SbxVariable( SbxVARIANT ); |