sw/source/core/unocore/unochart.cxx | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
New commits: commit 2c737cedd914e30b013b090392a43a4cb48e62a6 Author: Jürgen Schmidt <[email protected]> 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
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
