summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-11-17 08:24:30 +0100
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-11-18 22:34:12 +0100
commit84de459738d5c16b3df8719ff219aaccc3532b8c (patch)
tree9546497f02f30b4446c14960160c053134ad79fa
parent986ac894f4288fcbde35771793f332c5981abc27 (diff)
fix crash in dociter.cxx during import
-rw-r--r--sc/source/core/data/dociter.cxx17
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