Don't use output rArea when TableLayouter::getCellArea returns false

...when xCell->isMerged, as happens during CppunitTest_sd_filters_test.
aCellArea will be "empty" (i.e., getMinX()==SAL_MAX_INT32 etc.) and the
aCellRect.Move calculation will overflow for 32-bit long.

Change-Id: I12649234c060edd9f2cab1792cf75335ae22b730
This commit is contained in:
Stephan Bergmann 2014-10-29 10:47:41 +01:00
parent ff037a8c09
commit 87f5486dcb

View file

@ -860,15 +860,16 @@ void TableLayouter::updateCells( Rectangle& rRectangle )
if( xCell.is() )
{
basegfx::B2IRectangle aCellArea;
getCellArea( xCell, aPos, aCellArea );
Rectangle aCellRect;
aCellRect.Left() = aCellArea.getMinX();
aCellRect.Right() = aCellArea.getMaxX();
aCellRect.Top() = aCellArea.getMinY();
aCellRect.Bottom() = aCellArea.getMaxY();
aCellRect.Move( rRectangle.Left(), rRectangle.Top() );
xCell->setCellRect( aCellRect );
if( getCellArea( xCell, aPos, aCellArea ) )
{
Rectangle aCellRect;
aCellRect.Left() = aCellArea.getMinX();
aCellRect.Right() = aCellArea.getMaxX();
aCellRect.Top() = aCellArea.getMinY();
aCellRect.Bottom() = aCellArea.getMaxY();
aCellRect.Move( rRectangle.Left(), rRectangle.Top() );
xCell->setCellRect( aCellRect );
}
}
}
}