From f835cd19bf7ce165508b5009cc3f1d3f14904327 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Wed, 18 Aug 2021 16:57:18 +0100 Subject: ofz#37322 Bad-cast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit use a SwUnoCursor for the LastAnchorPos around here, this is similar to ofz#9858 Bad-cast Change-Id: I194a39ae13c382740b0ba8145dcc33fb2107105d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120679 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc | Bin 0 -> 5559 bytes sw/source/filter/ww8/ww8par.cxx | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc (limited to 'sw') diff --git a/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc b/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc new file mode 100644 index 000000000000..fd64eeed2963 Binary files /dev/null and b/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc differ diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index 42e8c415b156..a145b13279e4 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -2095,8 +2095,17 @@ void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr ) pRdr->m_xCtrlStck = std::move(mxOldStck); pRdr->m_xRedlineStack->closeall(*pRdr->m_pPaM->GetPoint()); + + // ofz#37322 drop m_pLastAnchorPos during RedlineStack dtor and restore it afterwards to the same + // place, or somewhere close if that place got destroyed + std::shared_ptr xLastAnchorCursor(pRdr->m_pLastAnchorPos ? pRdr->m_rDoc.CreateUnoCursor(*pRdr->m_pLastAnchorPos) : nullptr); + pRdr->m_pLastAnchorPos.reset(); + pRdr->m_xRedlineStack = std::move(mxOldRedlines); + if (xLastAnchorCursor) + pRdr->m_pLastAnchorPos.reset(new SwPosition(*xLastAnchorCursor->GetPoint())); + pRdr->DeleteAnchorStack(); pRdr->m_xAnchorStck = std::move(mxOldAnchorStck); -- cgit