[Libreoffice-commits] core.git: sc/source
Marco Cecchetti
marco.cecchetti at collabora.com
Mon Oct 3 12:10:48 UTC 2016
sc/source/ui/app/inputhdl.cxx | 16 ++++++++--------
sc/source/ui/view/viewdata.cxx | 7 ++++++-
2 files changed, 14 insertions(+), 9 deletions(-)
New commits:
commit 3fcd1f80afcf789fbafae2a4360b62111089a5cd
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
Date: Mon Sep 19 17:21:39 2016 +0200
Calc: edit engine could be accessed after being destroyed
ScTabView <---------------- ScTabViewShell
+ScViewData +ScInputHandler
+EditView[4] +EditEngine
+ImpEditEngine
+vector<pointer<EditView>>
On tab view shell destruction:
~ScTabViewShell -> ~ScTabView -> ScViewData::KillEditView ->
EditEngine::RemoveView
but it occurs after the following:
~ScTabViewShell -> ~ScInputHandler -> ~EditEngine
since data members are destroyed before ancestor classes.
Change-Id: Ida56b8009c0d8a3cd23952259d78318e96ae5124
Reviewed-on: https://gerrit.libreoffice.org/29409
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Marco Cecchetti <mrcekets at gmail.com>
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 964896d..d440c69 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -661,14 +661,14 @@ ScInputHandler::~ScInputHandler()
if ( pInputWin && pInputWin->GetInputHandler() == this )
pInputWin->SetInputHandler( nullptr );
- delete pRangeFindList;
- delete pEditDefaults;
- delete pEngine;
- delete pLastState;
- delete pDelayTimer;
- delete pColumnData;
- delete pFormulaData;
- delete pFormulaDataPara;
+ delete pRangeFindList; pRangeFindList = nullptr;
+ delete pEditDefaults; pEditDefaults = nullptr;
+ delete pEngine; pEngine = nullptr;
+ delete pLastState; pLastState = nullptr;
+ delete pDelayTimer; pDelayTimer = nullptr;
+ delete pColumnData; pColumnData = nullptr;
+ delete pFormulaData; pFormulaData = nullptr;
+ delete pFormulaDataPara; pFormulaDataPara = nullptr;
}
void ScInputHandler::SetRefScale( const Fraction& rX, const Fraction& rY )
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index c79f53c..240661d 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -1435,11 +1435,16 @@ void ScViewData::ResetEditView()
void ScViewData::KillEditView()
{
+ EditEngine* pEngine = nullptr;
for (sal_uInt16 i=0; i<4; i++)
if (pEditView[i])
{
if (bEditActive[i])
- pEditView[i]->GetEditEngine()->RemoveView(pEditView[i]);
+ {
+ pEngine = pEditView[i]->GetEditEngine();
+ if (pEngine)
+ pEngine->RemoveView(pEditView[i]);
+ }
delete pEditView[i];
pEditView[i] = nullptr;
}
More information about the Libreoffice-commits
mailing list