diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-31 11:23:04 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-03-31 11:52:10 +0000 |
commit | 8deb8ccdcfc06099a8a293a1ad16d1966f131007 (patch) | |
tree | 2eb2e4a737cb1af31b7b71c3f9fbaf894d95c105 | |
parent | 32cee6bb153ede8a79b831ed0cf7a0256d73363c (diff) |
ofz#974 check SetBorder bounds like the other maHorizontalBorders users
Change-Id: Iac113433ac2317ddfebc68ed793c481384d56551
Reviewed-on: https://gerrit.libreoffice.org/35966
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | svx/source/table/tablelayouter.cxx | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/svx/source/table/tablelayouter.cxx b/svx/source/table/tablelayouter.cxx index ae87f5044ad3..0328adaea4d1 100644 --- a/svx/source/table/tablelayouter.cxx +++ b/svx/source/table/tablelayouter.cxx @@ -916,36 +916,40 @@ bool TableLayouter::HasPriority( const SvxBorderLine* pThis, const SvxBorderLine } } - void TableLayouter::SetBorder( sal_Int32 nCol, sal_Int32 nRow, bool bHorizontal, const SvxBorderLine* pLine ) { - if( pLine == nullptr ) + if (!pLine) pLine = &gEmptyBorder; - SvxBorderLine *pOld = bHorizontal ? maHorizontalBorders[nCol][nRow] : maVerticalBorders[nCol][nRow]; + BorderLineMap& rMap = bHorizontal ? maHorizontalBorders : maVerticalBorders; - if( HasPriority( pLine, pOld ) ) + if( (nCol >= 0) && (nCol < sal::static_int_cast<sal_Int32>(rMap.size())) && + (nRow >= 0) && (nRow < sal::static_int_cast<sal_Int32>(rMap[nCol].size())) ) { - if( (pOld != nullptr) && (pOld != &gEmptyBorder) ) - delete pOld; + SvxBorderLine *pOld = rMap[nCol][nRow]; - SvxBorderLine* pNew = ( pLine != &gEmptyBorder ) ? new SvxBorderLine(*pLine) : &gEmptyBorder; + if (HasPriority(pLine, pOld)) + { + if (pOld && pOld != &gEmptyBorder) + delete pOld; - if( bHorizontal ) - maHorizontalBorders[nCol][nRow] = pNew; - else - maVerticalBorders[nCol][nRow] = pNew; + SvxBorderLine* pNew = (pLine != &gEmptyBorder) ? new SvxBorderLine(*pLine) : &gEmptyBorder; + + rMap[nCol][nRow] = pNew; + } + } + else + { + OSL_FAIL( "sdr::table::TableLayouter::SetBorder(), invalid border!" ); } } - void TableLayouter::ClearBorderLayout() { ClearBorderLayout(maHorizontalBorders); ClearBorderLayout(maVerticalBorders); } - void TableLayouter::ClearBorderLayout(BorderLineMap& rMap) { const sal_Int32 nColCount = rMap.size(); @@ -967,7 +971,6 @@ void TableLayouter::ClearBorderLayout(BorderLineMap& rMap) } } - void TableLayouter::ResizeBorderLayout() { ClearBorderLayout(); |