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 24d24debef 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>
This commit is contained in:
@@ -1061,9 +1061,9 @@ void ScMacrosTest::testTdf143582()
|
||||
aRet >>= aReturnValue;
|
||||
|
||||
// Without the fix in place, this test would have failed with
|
||||
// - Expected: Test
|
||||
// - Actual : TeTest
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("Test"), aReturnValue);
|
||||
// - Expected: Test6
|
||||
// - Actual : TeTest8
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("Test6"), aReturnValue);
|
||||
|
||||
css::uno::Reference<css::util::XCloseable> xCloseable(xComponent, css::uno::UNO_QUERY_THROW);
|
||||
xCloseable->close(true);
|
||||
|
||||
Binary file not shown.
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user