summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-10-28 23:43:02 +0100
committerMichael Stahl <mstahl@redhat.com>2015-10-29 00:32:24 +0100
commit65f98610ddb9b3847aad0566e15b6087d0149464 (patch)
tree32d54926a3b8ceb8dedc1575f6b5e9cc90e88263
parent9d28748d4b6d97bf0d18956e9e0336d71d9fc718 (diff)
sw: fix "long" overflow in lcl_CalcWish
0 + (1 * 32768 * 65536 / 65537) evaluates to -32767 with 32-bit MSVC whereas with 64-bit GCC the result is +32767. The multiplication overflows to 0x80000000 - so do that in 64 bits. This fixes the JunitTest_sw_unoapi_4 failure in SwXTextTable on the TableBorder property, where the wrong result caused MakeSelUnions() to believe that the last cell is not visible and hence setting the TableBorder property failed. Change-Id: Idb10535ce5342cd83d7ab6aea07782a2034469eb
-rw-r--r--sw/source/core/frmedt/tblsel.cxx3
1 files changed, 2 insertions, 1 deletions
diff --git a/sw/source/core/frmedt/tblsel.cxx b/sw/source/core/frmedt/tblsel.cxx
index 99b4e9edc926..269cdd516434 100644
--- a/sw/source/core/frmedt/tblsel.cxx
+++ b/sw/source/core/frmedt/tblsel.cxx
@@ -1503,7 +1503,8 @@ static SwTwips lcl_CalcWish( const SwLayoutFrm *pCell, long nWish,
while ( pTmp->GetPrev() )
{
pTmp = static_cast<const SwLayoutFrm*>(pTmp->GetPrev());
- long nTmp = pTmp->GetFormat()->GetFrmSize().GetWidth();
+ sal_Int64 nTmp = pTmp->GetFormat()->GetFrmSize().GetWidth();
+ // multiply in 64-bit to avoid overflow here!
nRet += ( bRTL ? ( -1 ) : 1 ) * nTmp * nAct / nWish;
}
pTmp = pTmp->GetUpper()->GetUpper();