summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <ooo@erack.de>2011-08-10 21:40:56 -0400
committerKohei Yoshida <kyoshida@novell.com>2011-08-10 21:45:39 -0400
commitba2069b96f6b00c93daf17b92a8d270186beb8f8 (patch)
treeb4999f2213e822d883cb1e2379b965a9ac4e47e7
parent807c3f3a3a350d10c7d51c70ee2653de73c94d1c (diff)
Prevent crash at column row boundaries.libreoffice-3-3
Modified from the original patch submitted by Olivier Hallot. Signed-off-by: Kohei Yoshida <kohei.yoshida@suse.com>
-rw-r--r--sc/source/ui/view/tabview2.cxx46
1 files changed, 16 insertions, 30 deletions
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx
index a4e75a4ac..3d746e962 100644
--- a/sc/source/ui/view/tabview2.cxx
+++ b/sc/source/ui/view/tabview2.cxx
@@ -656,53 +656,39 @@ void moveCursorByProtRule(
if (nMovX > 0)
{
- if (rCol < MAXCOL)
+ for (SCCOL i = 0; i < nMovX && rCol < MAXCOL; ++i)
{
- for (SCCOL i = 0; i < nMovX; ++i)
- {
- if (!isCellQualified(pDoc, rCol+1, rRow, nTab, bSelectLocked, bSelectUnlocked))
- break;
- ++rCol;
- }
+ if (!isCellQualified(pDoc, rCol+1, rRow, nTab, bSelectLocked, bSelectUnlocked))
+ break;
+ ++rCol;
}
}
else if (nMovX < 0)
{
- if (rCol > 0)
+ for (SCCOL i = 0; i > nMovX && rCol > 0; --i)
{
- nMovX = -nMovX;
- for (SCCOL i = 0; i < nMovX; ++i)
- {
- if (!isCellQualified(pDoc, rCol-1, rRow, nTab, bSelectLocked, bSelectUnlocked))
- break;
- --rCol;
- }
+ if (!isCellQualified(pDoc, rCol-1, rRow, nTab, bSelectLocked, bSelectUnlocked))
+ break;
+ --rCol;
}
}
if (nMovY > 0)
{
- if (rRow < MAXROW)
+ for (SCROW i = 0; i < nMovY && rRow < MAXROW; ++i)
{
- for (SCROW i = 0; i < nMovY; ++i)
- {
- if (!isCellQualified(pDoc, rCol, rRow+1, nTab, bSelectLocked, bSelectUnlocked))
- break;
- ++rRow;
- }
+ if (!isCellQualified(pDoc, rCol, rRow+1, nTab, bSelectLocked, bSelectUnlocked))
+ break;
+ ++rRow;
}
}
else if (nMovY < 0)
{
- if (rRow > 0)
+ for (SCROW i = 0; i > nMovY && rRow > 0; --i)
{
- nMovY = -nMovY;
- for (SCROW i = 0; i < nMovY; ++i)
- {
- if (!isCellQualified(pDoc, rCol, rRow-1, nTab, bSelectLocked, bSelectUnlocked))
- break;
- --rRow;
- }
+ if (!isCellQualified(pDoc, rCol, rRow-1, nTab, bSelectLocked, bSelectUnlocked))
+ break;
+ --rRow;
}
}
}