From 2f527be5513159c0aebd93f356cbd2b1dc04b253 Mon Sep 17 00:00:00 2001 From: Ivan Timofeev Date: Mon, 29 Jul 2013 21:43:59 +0400 Subject: fdo#67467: fix crash when renaming table in AutoFormat dialog this reverts 5031e17d4b11181be94448702b1026bd38e0b3c4 and uses ptr_vector::release instead of ptr_vector::erase to prevent object deletion. The use of "transfer" leads to "Assertion `(void*)&from != (void*)this' failed". Change-Id: I77467ce9e1d9dd4b833032ebbe920cbb34d36675 Reviewed-on: https://gerrit.libreoffice.org/5172 Reviewed-by: Michael Stahl Tested-by: Michael Stahl --- sw/inc/tblafmt.hxx | 2 +- sw/source/core/doc/tblafmt.cxx | 5 ++--- sw/source/ui/table/tautofmt.cxx | 7 +++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/sw/inc/tblafmt.hxx b/sw/inc/tblafmt.hxx index 58b1f10df2ee..404aaf6e3af2 100644 --- a/sw/inc/tblafmt.hxx +++ b/sw/inc/tblafmt.hxx @@ -314,7 +314,7 @@ public: SwTableAutoFmt & operator[](size_t i); void InsertAutoFmt(size_t i, SwTableAutoFmt * pFmt); void EraseAutoFmt(size_t i); - void MoveAutoFmt(size_t target, size_t source); + SwTableAutoFmt* ReleaseAutoFmt(size_t i); sal_Bool Load(); sal_Bool Save() const; diff --git a/sw/source/core/doc/tblafmt.cxx b/sw/source/core/doc/tblafmt.cxx index 80483b2fe1a4..40a07be46839 100644 --- a/sw/source/core/doc/tblafmt.cxx +++ b/sw/source/core/doc/tblafmt.cxx @@ -1051,10 +1051,9 @@ void SwTableAutoFmtTbl::EraseAutoFmt(size_t const i) m_pImpl->m_AutoFormats.erase(m_pImpl->m_AutoFormats.begin() + i); } -void SwTableAutoFmtTbl::MoveAutoFmt(size_t const target, size_t source) +SwTableAutoFmt* SwTableAutoFmtTbl::ReleaseAutoFmt(size_t const i) { - m_pImpl->m_AutoFormats.transfer(m_pImpl->m_AutoFormats.begin() + target, - m_pImpl->m_AutoFormats.begin() + source, m_pImpl->m_AutoFormats); + return m_pImpl->m_AutoFormats.release(m_pImpl->m_AutoFormats.begin() + i).release(); } SwTableAutoFmtTbl::~SwTableAutoFmtTbl() diff --git a/sw/source/ui/table/tautofmt.cxx b/sw/source/ui/table/tautofmt.cxx index 4300b0dafea4..2b4d1cfa1287 100644 --- a/sw/source/ui/table/tautofmt.cxx +++ b/sw/source/ui/table/tautofmt.cxx @@ -409,19 +409,18 @@ IMPL_LINK_NOARG(SwAutoFormatDlg, RenameHdl) { // no format with this name exists, so rename it m_pLbFormat->RemoveEntry( nDfltStylePos + nIndex ); - SwTableAutoFmt* p = &(*pTableTbl)[ nIndex ]; + SwTableAutoFmt* p = pTableTbl->ReleaseAutoFmt( nIndex ); p->SetName( aFormatName ); // keep all arrays sorted! for( n = 1; n < pTableTbl->size(); ++n ) - if ((n != nIndex) && - ((*pTableTbl)[n].GetName() > aFormatName)) + if ((*pTableTbl)[n].GetName() > aFormatName) { break; } - pTableTbl->MoveAutoFmt(n, nIndex); + pTableTbl->InsertAutoFmt( n, p ); m_pLbFormat->InsertEntry( aFormatName, nDfltStylePos + n ); m_pLbFormat->SelectEntryPos( nDfltStylePos + n ); -- cgit v1.2.3