summaryrefslogtreecommitdiff
path: root/basic/source
diff options
context:
space:
mode:
authorAndreas Heinisch <andreas.heinisch@yahoo.de>2020-11-29 10:26:56 +0100
committerAndreas Heinisch <andreas.heinisch@yahoo.de>2021-01-25 07:57:59 +0100
commit0426748927919dbfd4cf5c0bb904e21a90d6c9d7 (patch)
tree1db29bf0a56f76f9fc1cf2a23525cfda8dbfa2a4 /basic/source
parent0d5a0bf753dbc5ec3c3320a47972ccbe819787bb (diff)
tdf#136755, tdf#124008 - delete the variable beforehand REDIM
If an array of objects is passed as an argument to ReDim, delete the variable beforehand, otherwise the construction of the new variable fails, because the old one is still on the stack. Change-Id: Ic863a36f5f2aca658df369f95d275aa287edf795 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106832 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heinisch@yahoo.de>
Diffstat (limited to 'basic/source')
-rw-r--r--basic/source/comp/dim.cxx9
1 files changed, 7 insertions, 2 deletions
diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx
index 17eef0a263a5..e95e8ee88054 100644
--- a/basic/source/comp/dim.cxx
+++ b/basic/source/comp/dim.cxx
@@ -431,9 +431,14 @@ void SbiParser::DefVar( SbiOpcode eOp, bool bStatic )
}
else
{
- pDef->SetDims( pDim->GetDims() );
- SbiExpression aExpr( this, *pDef, std::move(pDim) );
+ // tdf#136755 - delete the variable beforehand REDIM
+ SbiExpression aExpr(this, *pDef, nullptr);
aExpr.Gen();
+ aGen.Gen(bVBASupportOn ? SbiOpcode::ERASE_CLEAR_ : SbiOpcode::ERASE_);
+
+ pDef->SetDims( pDim->GetDims() );
+ SbiExpression aExpr2( this, *pDef, std::move(pDim) );
+ aExpr2.Gen();
aGen.Gen( SbiOpcode::DCREATE_, pDef->GetId(), pDef->GetTypeId() );
}
}