diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-09-18 12:13:13 -0400 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2014-09-23 02:09:25 -0700 |
commit | 21297a3249aec0bda08b5b7e1c8091bb4417e255 (patch) | |
tree | 2969460d58fb96b0c1342e2f52a84df041fa2847 /sc | |
parent | bb6fdcc061d736ec4146dbf1244159835021b6e1 (diff) |
fdo#83764: Ensure that the row position is below MAXROW.
When attempting to split formula groups, else multi_type_vector would
try to locate a block outside its logical range.
Change-Id: I424ede112138de459b5ba3bff5e021c4407ccf3d
(cherry picked from commit 0ef6263ed2b31b8f9e431971e6c5e8928996c1c8)
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/data/column4.cxx | 7 | ||||
-rw-r--r-- | sc/source/core/data/table3.cxx | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index d1aacddf4adb..8b46e74831ab 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -499,11 +499,16 @@ public: void ScColumn::SplitFormulaGroupByRelativeRef( const ScRange& rBoundRange ) { + if (rBoundRange.aStart.Row() >= MAXROW) + // Nothing to split. + return; + std::vector<SCROW> aBounds; // Cut at row boundaries first. aBounds.push_back(rBoundRange.aStart.Row()); - aBounds.push_back(rBoundRange.aEnd.Row()+1); + if (rBoundRange.aEnd.Row() < MAXROW) + aBounds.push_back(rBoundRange.aEnd.Row()+1); sc::SharedFormulaUtil::splitFormulaCellGroups(maCells, aBounds); RelativeRefBoundChecker aFunc(rBoundRange); diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index c1a81e6c790b..946416da19fe 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -771,8 +771,11 @@ void ScTable::SortReorderByColumn( sc::CellStoreType& rCells = aCol[nCol].maCells; sc::CellStoreType::position_type aPos = rCells.position(nRow1); sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); - aPos = rCells.position(aPos.first, nRow2+1); - sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); + if (nRow2 < MAXROW) + { + aPos = rCells.position(aPos.first, nRow2+1); + sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); + } } } |