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

Jürgen Schmidt jsc at apache.org
Fri Apr 12 00:01:48 PDT 2013


 sw/source/core/unocore/unochart.cxx |   20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

New commits:
commit 2c737cedd914e30b013b090392a43a4cb48e62a6
Author: Jürgen Schmidt <jsc at apache.org>
Date:   Fri Jun 8 09:10:43 2012 +0000

    Resolves: #i119912# Crash when redo split pasted table used by chart
    
    fix: While deleting any box from chart data provider, verify whether there are
    any invalidate chart data sequence inside, if so, catch the exception and
    remove it.
    
    Patch By: Peng Chen
    Found By: yanji
    Review By: jsc
    
    (cherry picked from commit a92e353922d63d785e3d46aa1a4783846a9dea18)
    
    Change-Id: I239824e92d13e42b83674dbdeaeef053f1e6ea9a

diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx
index 17b116a..1448445 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -1583,6 +1583,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
         {
             SwChartDataSequence *pDataSeq = 0;
             sal_Bool bNowEmpty = sal_False;
+            sal_Bool bSeqDisposed = sal_False;
 
             // check if weak reference is still valid...
             uno::Reference< chart2::data::XDataSequence > xTemp(*aIt);  // temporary needed for g++ 3.3.5
@@ -1593,10 +1594,16 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
                 pDataSeq = static_cast< SwChartDataSequence * >( xRef.get() );
                 if (pDataSeq)
                 {
-#if OSL_DEBUG_LEVEL > 1
-                    OUString aRangeStr( pDataSeq->getSourceRangeRepresentation() );
-#endif
-                    bNowEmpty = pDataSeq->DeleteBox( rBox );
+                    try
+                    {
+                        bNowEmpty = pDataSeq->DeleteBox( rBox );
+                    }
+                    catch (const lang::DisposedException&)
+                    {
+                        bNowEmpty = sal_True;
+                        bSeqDisposed = sal_True;
+                    }
+
                     if (bNowEmpty)
                         aDelIt = aIt;
                 }
@@ -1606,7 +1613,7 @@ sal_Bool SwChartDataProvider::DeleteBox( const SwTable *pTable, const SwTableBox
             if (bNowEmpty)
             {
                 rSet.erase( aDelIt );
-                if (pDataSeq)
+                if (pDataSeq && !bSeqDisposed)
                     pDataSeq->dispose();    // the current way to tell chart that sth. got removed
             }
         }
@@ -2512,6 +2519,9 @@ void SAL_CALL SwChartDataSequence::removeEventListener(
 
 sal_Bool SwChartDataSequence::DeleteBox( const SwTableBox &rBox )
 {
+    if (bDisposed)
+        throw lang::DisposedException();
+
 #if OSL_DEBUG_LEVEL > 1
     String aBoxName( rBox.GetName() );
 #endif


More information about the Libreoffice-commits mailing list