diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-11-17 08:24:30 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-11-18 22:34:12 +0100 |
commit | 84de459738d5c16b3df8719ff219aaccc3532b8c (patch) | |
tree | 9546497f02f30b4446c14960160c053134ad79fa | |
parent | 986ac894f4288fcbde35771793f332c5981abc27 (diff) |
fix crash in dociter.cxx during import
-rw-r--r-- | sc/source/core/data/dociter.cxx | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index 9cee166b9f37..cb1bee789ad6 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -75,9 +75,10 @@ ScDocumentIterator::ScDocumentIterator( ScDocument* pDocument, nStartTab( nStartTable ), nEndTab( nEndTable ) { + SCTAB nDocMaxTab = pDoc->GetTableCount() - 1; PutInOrder( nStartTab, nEndTab ); - if (!ValidTab(nStartTab)) nStartTab = pDoc->GetTableCount()-1; - if (!ValidTab(nEndTab)) nEndTab = pDoc->GetTableCount()-1; + if (!ValidTab(nStartTab) || nStartTab > nDocMaxTab ) nStartTab = nDocMaxTab; + if (!ValidTab(nEndTab) || nStartTab > nDocMaxTab ) nEndTab = nDocMaxTab; pDefPattern = pDoc->GetDefPattern(); @@ -262,6 +263,8 @@ ScValueIterator::ScValueIterator( ScDocument* pDocument, const ScRange& rRange, bCalcAsShown( pDocument->GetDocOptions().IsCalcAsShown() ), bTextAsZero( bTextZero ) { + SCTAB nDocMaxTab = pDocument->GetTableCount() - 1; + PutInOrder( nStartCol, nEndCol); PutInOrder( nStartRow, nEndRow); PutInOrder( nStartTab, nEndTab ); @@ -270,8 +273,8 @@ ScValueIterator::ScValueIterator( ScDocument* pDocument, const ScRange& rRange, if (!ValidCol(nEndCol)) nEndCol = MAXCOL; if (!ValidRow(nStartRow)) nStartRow = MAXROW; if (!ValidRow(nEndRow)) nEndRow = MAXROW; - if (!ValidTab(nStartTab)) nStartTab = MAXTAB; - if (!ValidTab(nEndTab)) nEndTab = MAXTAB; + if (!ValidTab(nStartTab) || nStartTab > nDocMaxTab) nStartTab = nDocMaxTab; + if (!ValidTab(nEndTab) || nEndTab > nDocMaxTab) nEndTab = nDocMaxTab; nCol = nStartCol; nRow = nStartRow; @@ -944,6 +947,8 @@ ScCellIterator::ScCellIterator( ScDocument* pDocument, bSubTotal(bSTotal) { + SCTAB nDocMaxTab = pDocument->GetTableCount() - 1; + PutInOrder( nStartCol, nEndCol); PutInOrder( nStartRow, nEndRow); PutInOrder( nStartTab, nEndTab ); @@ -952,8 +957,8 @@ ScCellIterator::ScCellIterator( ScDocument* pDocument, if (!ValidCol(nEndCol)) nEndCol = MAXCOL; if (!ValidRow(nStartRow)) nStartRow = MAXROW; if (!ValidRow(nEndRow)) nEndRow = MAXROW; - if (!ValidTab(nStartTab)) nStartTab = pDoc->GetTableCount()-1; - if (!ValidTab(nEndTab)) nEndTab = pDoc->GetTableCount()-1; + if (!ValidTab(nStartTab) || nStartTab > nDocMaxTab) nStartTab = nDocMaxTab; + if (!ValidTab(nEndTab) || nEndTab > nDocMaxTab) nEndTab = nDocMaxTab; while (nEndTab>0 && !pDoc->maTabs[nEndTab]) --nEndTab; // nur benutzte Tabellen |