sc/source/core/data/stlsheet.cxx | 17 ++++++++++++----- sw/inc/docary.hxx | 6 ++++-- sw/source/core/layout/fly.cxx | 4 ++++ sw/source/core/layout/flyincnt.cxx | 4 ++++ sw/source/core/layout/pagechg.cxx | 4 ++++ sw/source/core/layout/wsfrm.cxx | 10 +++------- vcl/source/window/syswin.cxx | 3 +++ 7 files changed, 34 insertions(+), 14 deletions(-)
New commits: commit 0f98299f7aa44bbb55c1bfeddca7799f727d14b0 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 13:52:03 2015 +0100 Avoid bad downcast of SwFrmFmt to SwSectionFmt as observed by -fsanitize=vptr e.g. during CppunitTest_writerperfect_writer: SwFmtsModifyBase<SwSectionFmt*>::Contains(SwFmt const*) const SwUndoFmtAttr::Init() SwUndoFmtAttr::SwUndoFmtAttr(SfxItemSet const&, SwFmt&, bool) SwDoc::ChgFmt(SwFmt&, SfxItemSet const&) SwDocStyleSheet::SetItemSet(SfxItemSet const&, bool) SwXStyle::SetPropertyValues_Impl(com::sun::star::uno::Sequence<rtl::OUString> const&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) SwXStyle::setPropertyValues(com::sun::star::uno::Sequence<rtl::OUString> const&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) SvXMLImportPropertyMapper::_FillMultiPropertySet(std::__debug::vector<XMLPropertyState, std::allocator<XMLPropertyState> > const&, com::sun::star::uno::Reference<com::sun::star::beans::XMultiPropertySet> const&, com::sun::star::uno::Reference<com::sun::star::beans::XPropertySetInfo> const&, rtl::Reference<XMLPropertySetMapper> const&, _ContextID_Index_Pair*) SvXMLImportPropertyMapper::FillPropertySet(std::__debug::vector<XMLPropertyState, std::allocator<XMLPropertyState> > const&, com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>, _ContextID_Index_Pair*) const XMLShapeStyleContext::FillPropertySet(com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> const&) XMLPropStyleContext::CreateAndInsert(bool) XMLTextShapeStyleContext::CreateAndInsert(bool) SvXMLStylesContext::CopyStylesToDoc(bool, bool) SwXMLImport::InsertStyles(bool) SwXMLStylesContext_Impl::EndElement() SvXMLImport::endElement(rtl::OUString const&) ... Change-Id: Ibbf6d4def751c5a8ad1416e22b8b5255eda3dd44 diff --git a/sw/inc/docary.hxx b/sw/inc/docary.hxx index 098851e..8768cc0 100644 --- a/sw/inc/docary.hxx +++ b/sw/inc/docary.hxx @@ -128,8 +128,10 @@ public: inline sal_uInt16 GetPos(const SwFmt *p) const { return SwVectorModifyBase<Value>::GetPos( static_cast<Value>( const_cast<SwFmt*>( p ) ) ); } - inline bool Contains(const SwFmt *p) const - { return SwVectorModifyBase<Value>::Contains( static_cast<Value>( const_cast<SwFmt*>( p ) ) ); } + inline bool Contains(const SwFmt *p) const { + Value p2 = dynamic_cast<Value>(const_cast<SwFmt*>(p)); + return p2 != nullptr && SwVectorModifyBase<Value>::Contains(p2); + } }; class SwGrfFmtColls : public SwFmtsModifyBase<SwGrfFmtColl*> commit dedc93e973b59ca4d1660fc3820770bf9b072896 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 13:43:49 2015 +0100 Hack to work around an in-destruction SwTxtNode no longer being one as observed by -fsanitize=vptr e.g. during CppunitTest_sw_mailmerge (though the true fix might be to prevent all this from happening during ~SwTxtNode anyway?): SwTxtFrm::GetTxtNode() const SwFrm::InvalidatePage(SwPageFrm const*) const SwCntntFrm::Cut() SwCntntNode::DelFrms(bool) SwCntntNode::~SwCntntNode() SwTxtNode::~SwTxtNode() SwNodes::RemoveNode(unsigned long, unsigned long, bool) SwNodes::Delete(SwNodeIndex const&, unsigned long) SwDoc::AppendDoc(SwDoc const&, unsigned short, SwPageDesc*, bool, int) ... Change-Id: Ic3bdf067abba985a0b95d4f0a482a94098341198 diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx index d6ee2fa..aea4702 100644 --- a/sw/source/core/layout/wsfrm.cxx +++ b/sw/source/core/layout/wsfrm.cxx @@ -435,13 +435,9 @@ void SwFrm::InvalidatePage( const SwPageFrm *pPage ) const } pRoot->SetIdleFlags(); - const SwTxtFrm *pTxtFrm = dynamic_cast< const SwTxtFrm * >(this); - if (pTxtFrm) - { - const SwTxtNode *pTxtNode = pTxtFrm->GetTxtNode(); - if (pTxtNode && pTxtNode->IsGrammarCheckDirty()) - pRoot->SetNeedGrammarCheck( true ); - } + const SwTxtNode *pTxtNode = dynamic_cast< const SwTxtNode * >(GetDep()); + if (pTxtNode && pTxtNode->IsGrammarCheckDirty()) + pRoot->SetNeedGrammarCheck( true ); } } commit db2c0dc78f11c2764f16e7ca4edaf2cdffc56c64 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 13:34:52 2015 +0100 Hack to make an in-destruction SwPageFrm no longer claim to be one as observed by -fsanitize=vptr e.g. during CppunitTest_sw_mailmerge (though the true fix might be to prevent all this from happening during ~SwPageFrm anyway?): SwFrm::FindPageFrm() SwAnchoredObject::FindPageFrmOfAnchor() lcl_NotifyBackgroundOfObj(SwDrawContact&, SdrObject const&, Rectangle const*) SwDrawContact::DisconnectFromLayout(bool) SwDrawContact::DisconnectObjFromLayout(SdrObject*) SwLayoutFrm::Destroy() SwLayoutFrm::~SwLayoutFrm() SwFtnBossFrm::~SwFtnBossFrm() SwPageFrm::~SwPageFrm() SwFrm::CheckPageDescs(SwPageFrm*, bool, SwPageFrm**) SwFlowFrm::MoveBwd(bool&) SwCntntFrm::MakeAll() SwFrm::PrepareMake() SwFrm::Calc() SwLayAction::IsShortCut(SwPageFrm*&) SwLayAction::InternalAction() SwLayAction::Action() SwViewShell::ImplEndAction(bool) SwViewShell::EndAction(bool) SwCrsrShell::EndAction(bool, bool) SwEditShell::EndAllAction() SwDoc::AppendDoc(SwDoc const&, unsigned short, SwPageDesc*, bool) ... Change-Id: Iac207ef4a80318609f0a00d219dcccacaee7b205 diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index 60c1f06..f65afbc 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -263,6 +263,10 @@ SwPageFrm::~SwPageFrm() } } } + + // Hack to make sure code called from base ~SwFtnBossFrm does not interpret + // this as a SwPageFrm (which it no longer is by then): + mnFrmType = FRM_UNUSED; } void SwPageFrm::CheckGrid( bool bInvalidate ) commit e49ca69747e9e905dbb00bbd5a7ea85331607a04 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 13:30:09 2015 +0100 Hack to make an in-destruction SwFlyInCntFrm no longer claim to be one as observed by -fsanitize=vptr e.g. during CppunitTest_sw_uiwriter (though the true fix might be to prevent all this from happening during ~SwFlyInFrm anyway?): SwFrm::InvalidatePage(SwPageFrm const*) SwFlyFrm::DeleteCnt() SwFlyFrm::~SwFlyFrm() SwFlyInCntFrm::~SwFlyInCntFrm() SwFrmFmt::DelFrms() SwUndoFlyBase::DelFly(SwDoc*) SwUndoDelLayFmt::SwUndoDelLayFmt(SwFrmFmt*) SwHistoryTxtFlyCnt::SwHistoryTxtFlyCnt(SwFrmFmt*) SwHistory::Add(SwTxtAttr*, unsigned long, bool) SwUndoSaveCntnt::DelCntntIndex(SwPosition const&, SwPosition const&, unsigned short) SwUndoDelete::SwUndoDelete(SwPaM&, bool, bool) sw::DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM&) sw::DocumentContentOperationsManager::DeleteRangeImpl(SwPaM&, bool) sw::DocumentContentOperationsManager::DeleteAndJoinImpl(SwPaM&, bool) (anonymous namespace)::lcl_DoWithBreaks(sw::DocumentContentOperationsManager&, SwPaM&, bool (sw::DocumentContentOperationsManager::*)(SwPaM&, bool), bool) sw::DocumentContentOperationsManager::DeleteAndJoin(SwPaM&, bool) SwEditShell::DeleteSel(SwPaM&, bool*) SwEditShell::Delete() ... Change-Id: I6e3d7f3ab9f11a46324826201bc1af9a2d3a88cb diff --git a/sw/source/core/layout/flyincnt.cxx b/sw/source/core/layout/flyincnt.cxx index 2a9c885..10d15ac 100644 --- a/sw/source/core/layout/flyincnt.cxx +++ b/sw/source/core/layout/flyincnt.cxx @@ -48,6 +48,10 @@ SwFlyInCntFrm::~SwFlyInCntFrm() SwRect aTmp( GetObjRectWithSpaces() ); SwFlyInCntFrm::NotifyBackground( FindPageFrm(), aTmp, PREP_FLY_LEAVE ); } + + // Hack to make sure code called from base ~SwFlyFrm does not interpret this + // as a SwFlyFrm (which it no longer is by then): + mnFrmType = FRM_UNUSED; } // #i28701# commit 5a934b2c6085d4e397e1466f8cd6a813f3c2d9d6 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 13:20:21 2015 +0100 Hack to make an in-destruction SwFlyFrm no longer claim to be one as observed by -fsanitize=vptr e.g. during CppunitTest_writerperfect_writer (though the true fix might be to prevent all this from happening during ~SwFlyFrm anyway?): SwFrm::FindPageFrm() SwAnchoredObject::FindPageFrmOfAnchor() lcl_NotifyBackgroundOfObj(SwDrawContact&, SdrObject const&, Rectangle const*) SwDrawContact::DisconnectFromLayout(bool) SwDrawContact::DisconnectObjFromLayout(SdrObject*) SwLayoutFrm::Destroy() SwLayoutFrm::~SwLayoutFrm() SwFlyFrm::~SwFlyFrm() SwFlyFreeFrm::~SwFlyFreeFrm() SwFlyLayFrm::~SwFlyLayFrm() SwLayoutFrm::Destroy() SwRootFrm::~SwRootFrm() ... boost::shared_ptr<SwRootFrm>::~shared_ptr() SwViewShell::~SwViewShell() SwCrsrShell::~SwCrsrShell() SwEditShell::~SwEditShell() SwFEShell::~SwFEShell() SwWrtShell::~SwWrtShell() SwView::~SwView() SfxViewFrame::ReleaseObjectShell_Impl() SfxViewFrame::~SfxViewFrame() SfxViewFrame::Close() ... Change-Id: I56d7135044e8682eeaf6ef23c76d4d7beca1eff4 diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index 529d194..8e788e0 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -268,6 +268,10 @@ SwFlyFrm::~SwFlyFrm() } FinitDrawObj(); + + // Hack to make sure code called from base ~SwLayoutFrm does not interpret + // this as a SwFlyFrm (which it no longer is by then): + mnFrmType = FRM_UNUSED; } const IDocumentDrawModelAccess* SwFlyFrm::getIDocumentDrawModelAccess() commit a015f2c125ebeff895984ff99267918932df529d Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 12:01:34 2015 +0100 Hack to work around an in-destruction ScStyleSheetPool no longer being one as observed by -fsanitize=vptr e.g. during CppunitTest_sc_filters_test (though the true fix might be to prevent all this from happening during ~ScStyleSheetPool anyway?): ScStyleSheet::GetItemSet() ScStyleSheet::Notify(SfxBroadcaster&, SfxHint const&) SfxBroadcaster::Broadcast(SfxHint const&) SfxBroadcaster::~SfxBroadcaster() SfxStyleSheet::~SfxStyleSheet() ScStyleSheet::~ScStyleSheet() cppu::OWeakObject::release() comphelper::OWeakTypeObject::release() rtl::Reference<SfxStyleSheetBase>::~Reference() ... std::vector<rtl::Reference<SfxStyleSheetBase>, std::allocator<rtl::Reference<SfxStyleSheetBase>>>::clear() svl::IndexedStyleSheets::Clear(svl::StyleSheetDisposer&) SfxStyleSheetBasePool::Clear() SfxStyleSheetBasePool::~SfxStyleSheetBasePool() SfxStyleSheetPool::~SfxStyleSheetPool() ScStyleSheetPool::~ScStyleSheetPool() cppu::OWeakObject::release() comphelper::OWeakTypeObject::release() rtl::Reference<ScStyleSheetPool>::clear() ScPoolHelper::~ScPoolHelper() salhelper::SimpleReferenceObject::release() rtl::Reference<ScPoolHelper>::clear() ScDocument::~ScDocument() ScDocShell::~ScDocShell() ... Change-Id: I1565f8dbd039de20f63ac20d6b86d7b0d2799637 diff --git a/sc/source/core/data/stlsheet.cxx b/sc/source/core/data/stlsheet.cxx index 116371a..4ca8070 100644 --- a/sc/source/core/data/stlsheet.cxx +++ b/sc/source/core/data/stlsheet.cxx @@ -225,11 +225,18 @@ SfxItemSet& ScStyleSheet::GetItemSet() { if ( !pSet->Count() ) { - ScDocument* pDoc = static_cast<ScStyleSheetPool&>(GetPool()).GetDocument(); - if ( pDoc ) - { - sal_uLong nNumFmt = pDoc->GetFormatTable()->GetStandardFormat( css::util::NumberFormat::CURRENCY,ScGlobal::eLnge ); - pSet->Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNumFmt ) ); + // Hack to work around that when this code is called from + // ~ScStyleSheetPool -> ~SfxStyleSheetPool, GetPool() is no longer + // an ScStyleSheetPool: + ScStyleSheetPool * pool = dynamic_cast<ScStyleSheetPool *>( + &GetPool()); + if (pool != nullptr) { + ScDocument* pDoc = pool->GetDocument(); + if ( pDoc ) + { + sal_uLong nNumFmt = pDoc->GetFormatTable()->GetStandardFormat( css::util::NumberFormat::CURRENCY,ScGlobal::eLnge ); + pSet->Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNumFmt ) ); + } } } } commit 6449e5bb6dd1f09678e09164ef21f455132af98f Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Mar 4 11:52:16 2015 +0100 Hack to make an in-destruction SystemWindow no longer claim to be one as observed by -fsanitize=vptr e.g. during CppunitTest_sc_macros_test (though the true fix might be to prevent all this from happening during ~SystemWindow anyway?): vcl::ImplGetLastSystemWindow(vcl::Window*) vcl::Window::SetParent(vcl::Window*) vcl::Window::doLazyDelete() UnoWrapper::WindowDestroyed(vcl::Window*) vcl::Window::~Window() SystemWindow::~SystemWindow() WorkWindow::~WorkWindow() VCLXDevice::DestroyOutputDevice() VCLXWindow::dispose() (anonymous namespace)::Frame::impl_disposeContainerWindow(com::sun::star::uno::Reference<com::sun::star::awt::XWindow>&) (anonymous namespace)::Frame::dispose() (anonymous namespace)::Frame::close(unsigned char) non-virtual thunk to (anonymous namespace)::Frame::close(unsigned char) SfxFrame::DoClose() ... Change-Id: I91495eaa3cb2c636fd093ae7eb8b6ae4733002bb diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index 5c953f3..dde7bc9 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -109,6 +109,9 @@ SystemWindow::~SystemWindow() maLayoutIdle.Stop(); delete mpImplData; mpImplData = NULL; + // Hack to make sure code called from base ~Window does not interpret this + // as a SystemWindow (which it no longer is by then): + mpWindowImpl->mbSysWin = false; } bool SystemWindow::Notify( NotifyEvent& rNEvt ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits