sc/source/core/data/documen4.cxx | 32 ++++++++++---------------------- sc/source/filter/xml/xmlcelli.cxx | 4 ++-- 2 files changed, 12 insertions(+), 24 deletions(-)
New commits: commit dfdbf14006d4baf822f399821dfb9d5412f8ab9e Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 3 17:46:18 2013 +0100 make sure the column index is valid, fdo#58539 This is the first part of the fix for gnome#627150 Change-Id: I02cd8c553dd6b9a026c0ea38d77c6831fef6498e diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index 7e064ae..b3bb256 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -119,6 +119,8 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, { PutInOrder(nCol1, nCol2); PutInOrder(nRow1, nRow2); + nCol2 = std::min<SCCOL>(nCol2, MAXCOL); + nRow2 = std::min<SCROW>(nRow2, MAXROW); if (!rMark.GetSelectCount()) { SAL_WARN("sc", "ScDocument::InsertMatrixFormula Keine Tabelle markiert"); diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index e27267d..41bd60c 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -1063,8 +1063,8 @@ void ScXMLTableRowCellContext::AddFormulaCell( const ScAddress& rCellPos ) //value/text of each matrix cell later rXMLImport.GetTables().AddMatrixRange( rCellPos.Col(), rCellPos.Row(), - rCellPos.Col() + nMatrixCols - 1, - rCellPos.Row() + nMatrixRows - 1, + std::min<SCCOL>(rCellPos.Col() + nMatrixCols - 1, MAXCOL), + std::min<SCROW>(rCellPos.Row() + nMatrixRows - 1, MAXROW), pOUFormula->first, pOUFormula->second, eGrammar); //set the value/text of the first matrix position (top-left). commit 99f3e0807d911f1190664692a04db9cded8260c9 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 3 15:16:57 2013 +0100 simplify this code a little bit and restore some of the old optimizations Change-Id: I1b42ed135bd3f8dfb663740a1bd2dbfa1216a388 diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index cc3b181..7e064ae 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -119,29 +119,14 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, { PutInOrder(nCol1, nCol2); PutInOrder(nRow1, nRow2); - SCTAB i, nTab1; - SCCOL j; - SCROW k; - i = 0; - bool bStop = false; - SCTAB nMax = static_cast<SCTAB>(maTabs.size()); - ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); - for (; itr != itrEnd && *itr < nMax; ++itr) + if (!rMark.GetSelectCount()) { - if (maTabs[i]) - { - i = *itr; - bStop = true; - break; - } - } - nTab1 = i; - if (!bStop) - { - OSL_FAIL("ScDocument::InsertMatrixFormula Keine Tabelle markiert"); + SAL_WARN("sc", "ScDocument::InsertMatrixFormula Keine Tabelle markiert"); return; } + SCTAB nTab1 = *rMark.begin(); + ScFormulaCell* pCell; ScAddress aPos( nCol1, nRow1, nTab1 ); if (pArr) @@ -149,7 +134,8 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, else pCell = new ScFormulaCell( this, aPos, rFormula, eGram, MM_FORMULA ); pCell->SetMatColsRows( nCol2 - nCol1 + 1, nRow2 - nRow1 + 1, bDirtyFlag ); - itr = rMark.begin(); + ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end(); + SCTAB nMax = static_cast<SCTAB>(maTabs.size()); for (; itr != itrEnd && *itr < nMax; ++itr) { if (maTabs[*itr]) @@ -186,9 +172,9 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, aRefData.nRelTab = *itr - nTab1; t->GetSingleRef() = aRefData; } - for (j = nCol1; j <= nCol2; j++) + for (SCCOL j = nCol1; j <= nCol2; j++) { - for (k = nRow1; k <= nRow2; k++) + for (SCROW k = nRow1; k <= nRow2; k++) { if (j != nCol1 || k != nRow1) // nicht in der ersten Zelle { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits