sfx2/source/doc/objstor.cxx | 2 sw/source/core/docnode/ndtbl.cxx | 10 ++++ sw/source/core/unocore/unotext.cxx | 4 + sw/source/core/view/viewsh.cxx | 32 ++++++++------- writerfilter/source/dmapper/DomainMapperTableManager.cxx | 2 writerfilter/source/rtftok/rtftokenizer.cxx | 10 ++++ 6 files changed, 43 insertions(+), 17 deletions(-)
New commits: commit 234f150f30d881b2691288c5f5581306bd4d3d18 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Apr 14 12:45:38 2012 +0100 Resolves: fdo#48640 handle various busted rtf docs without hanging diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index e42df41..d8406dc 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -2236,7 +2236,7 @@ sal_Bool SfxObjectShell::ImportFrom( SfxMedium& rMedium, bool bInsert ) } return xLoader->filter( aArgs ); - }catch(const uno::Exception&) + }catch(...) {} } diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 0817150..7be23f3 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -1078,8 +1078,16 @@ SwTableNode* SwNodes::TextToTable( const SwNodeRange& rRange, sal_Unicode cCh, const SwTable* SwDoc::TextToTable( const std::vector< std::vector<SwNodeRange> >& rTableNodes ) { + if (rTableNodes.empty()) + return NULL; + + std::vector<SwNodeRange> rFirstRange = *rTableNodes.begin(); + + if (rFirstRange.empty()) + return NULL; + /* Save first node in the selection if it is a content node. */ - SwCntntNode * pSttCntntNd = rTableNodes.begin()->begin()->aStart.GetNode().GetCntntNode(); + SwCntntNode * pSttCntntNd = rFirstRange.begin()->aStart.GetNode().GetCntntNode(); /**debug**/ #if OSL_DEBUG_LEVEL > 1 diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx index 08e6ce5..2334391 100644 --- a/sw/source/core/unocore/unotext.cxx +++ b/sw/source/core/unocore/unotext.cxx @@ -2230,6 +2230,10 @@ throw (lang::IllegalArgumentException, uno::RuntimeException) std::vector<VerticallyMergedCell> aMergedCells; SwTable const*const pTable = m_pImpl->m_pDoc->TextToTable( aTableNodes ); + + if (!pTable) + return uno::Reference< text::XTextTable >(); + SwXTextTable *const pTextTable = new SwXTextTable( *pTable->GetFrmFmt() ); const uno::Reference< text::XTextTable > xRet = pTextTable; const uno::Reference< beans::XPropertySet > xPrSet = pTextTable; diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx index 17b48da..89a71f1 100644 --- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx @@ -442,7 +442,7 @@ void DomainMapperTableManager::endOfRowAction() double nFullWidth = m_nTableWidth; //the positions have to be distibuted in a range of 10000 const double nFullWidthRelative = 10000.; - if( pTableGrid->size() == nGrids ) + if( pTableGrid->size() == nGrids && m_nCell > 0 ) { uno::Sequence< text::TableColumnSeparator > aSeparators( m_nCell - 1 ); text::TableColumnSeparator* pSeparators = aSeparators.getArray(); diff --git a/writerfilter/source/rtftok/rtftokenizer.cxx b/writerfilter/source/rtftok/rtftokenizer.cxx index d6dc3ca..125319e 100644 --- a/writerfilter/source/rtftok/rtftokenizer.cxx +++ b/writerfilter/source/rtftok/rtftokenizer.cxx @@ -213,6 +213,11 @@ int RTFTokenizer::resolveKeyword() { aBuf.append(ch); Strm() >> ch; + if (Strm().IsEof()) + { + ch = ' '; + break; + } } if (aBuf.getLength() > 32) // See RTF spec v1.9.1, page 7 @@ -237,6 +242,11 @@ int RTFTokenizer::resolveKeyword() { aParameter.append(ch); Strm() >> ch; + if (Strm().IsEof()) + { + ch = ' '; + break; + } } nParam = aParameter.makeStringAndClear().toInt32(); if (bNeg) commit 1856186951a70a0bcac4e0c3632ca4afe68c05e3 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Apr 14 07:56:45 2012 +0100 optimize: traverse children with WINDOW_FIRSTCHILD/WINDOW_NEXT diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index 774000c..04717dd 100644 --- a/sw/source/core/view/viewsh.cxx +++ b/sw/source/core/view/viewsh.cxx @@ -370,25 +370,29 @@ void ViewShell::ImplEndAction( const sal_Bool bIdleEnd ) if ( GetWin() ) { Window& rWindow = *(GetWin()); - if(rWindow.IsChildTransparentModeEnabled() && rWindow.GetChildCount()) + if (rWindow.IsChildTransparentModeEnabled()) { - const Rectangle aRectanglePixel(rWindow.LogicToPixel(aRect.SVRect())); - - for ( sal_uInt16 a(0); a < rWindow.GetChildCount(); a++ ) + Window* pCandidate = rWindow.GetWindow( WINDOW_FIRSTCHILD ); + if (pCandidate) { - Window* pCandidate = rWindow.GetChild(a); + const Rectangle aRectanglePixel(rWindow.LogicToPixel(aRect.SVRect())); - if ( pCandidate && pCandidate->IsPaintTransparent() ) + while (pCandidate) { - const Rectangle aCandidatePosSizePixel( - pCandidate->GetPosPixel(), - pCandidate->GetSizePixel()); - - if ( aCandidatePosSizePixel.IsOver(aRectanglePixel) ) + if ( pCandidate->IsPaintTransparent() ) { - pCandidate->Invalidate( INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN ); - pCandidate->Update(); - } + const Rectangle aCandidatePosSizePixel( + pCandidate->GetPosPixel(), + pCandidate->GetSizePixel()); + + if ( aCandidatePosSizePixel.IsOver(aRectanglePixel) ) + { + pCandidate->Invalidate( INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN ); + pCandidate->Update(); + } + } + + pCandidate = pCandidate->GetWindow( WINDOW_NEXT ); } } }
_______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits