[Libreoffice-commits] core.git: sw/inc sw/source

Ivan Timofeev timofeev.i.s at gmail.com
Mon Jul 29 12:55:03 PDT 2013


 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(-)

New commits:
commit 2f527be5513159c0aebd93f356cbd2b1dc04b253
Author: Ivan Timofeev <timofeev.i.s at gmail.com>
Date:   Mon Jul 29 21:43:59 2013 +0400

    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 <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/inc/tblafmt.hxx b/sw/inc/tblafmt.hxx
index 58b1f10..404aaf6 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 80483b2..40a07be 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 4300b0d..2b4d1cf 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 );
 


More information about the Libreoffice-commits mailing list