summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-04-02 23:33:41 +0200
committerCaolán McNamara <caolanm@redhat.com>2015-04-03 07:25:43 +0000
commitadd86b9d5fcf3cb52549e64be148ba9e7bb4005e (patch)
tree05a55a204e2823fe9e6db8d1bb430dece891ad2e /sw
parentd8d946210a39400e4fc0b83f186e6234ad364836 (diff)
sw: fix crash on SwUndoDelete after select-all with table at start
Somehow the Redo leaves the shell cursor at an invalid offset into the paragraph, which then leads to out-of-bounds string access. Noticed that SwUndRng::SetPaM() leaves an invalid nContent.m_nIndex on the start position, due to a surprising omission in SwIndex::ChgValue(). (regression from 555ff26501d1bbd8a7872c20671c6303db1e1701) Change-Id: I6e6ad7f70835d7e9d6da1fb680e2ae15469fad71 (cherry picked from commit b24a15a0aaea310806259eaa20a7d509ce30e5c8) Reviewed-on: https://gerrit.libreoffice.org/15128 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/bastyp/index.cxx1
-rw-r--r--sw/source/core/edit/eddel.cxx1
2 files changed, 2 insertions, 0 deletions
diff --git a/sw/source/core/bastyp/index.cxx b/sw/source/core/bastyp/index.cxx
index d77e23961d6a..dc5041f3c514 100644
--- a/sw/source/core/bastyp/index.cxx
+++ b/sw/source/core/bastyp/index.cxx
@@ -81,6 +81,7 @@ SwIndex& SwIndex::ChgValue( const SwIndex& rIdx, sal_Int32 nNewValue )
assert(m_pIndexReg == rIdx.m_pIndexReg);
if (!m_pIndexReg)
{
+ m_nIndex = 0;
return *this; // no IndexReg => no list to sort into; m_nIndex is 0
}
SwIndex* pFnd = const_cast<SwIndex*>(&rIdx);
diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx
index 8be74f310ee0..789c4c4a6232 100644
--- a/sw/source/core/edit/eddel.cxx
+++ b/sw/source/core/edit/eddel.cxx
@@ -99,6 +99,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo )
// Selection starts at the first para of the first cell, but we
// want to delete the table node before the first cell as well.
pNewPam->Start()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex();
+ pNewPam->Start()->nContent.Assign(nullptr, 0);
pPam = pNewPam.get();
}
// delete everything