diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-31 11:23:04 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-04-07 09:01:05 +0000 |
commit | fef765d68d090bb439f58347afc930f48567673e (patch) | |
tree | 87d645eb8d5b93920aa13ce660a5ce8c7f552332 | |
parent | 6c401a7bdc4e0f5340203b9885e368cb96986aa1 (diff) |
ofz#974 check SetBorder bounds like the other maHorizontalBorders users
Change-Id: Iac113433ac2317ddfebc68ed793c481384d56551
Reviewed-on: https://gerrit.libreoffice.org/35964
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@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 ae588b11a5aa..3c08c79e085a 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(); |