Kaydet (Commit) c13865a4 authored tarafından Noel Grandin's avatar Noel Grandin

tdf#118716 Inner border of an embedded table can't be dragged around

regression from
    commit f14b9d30
    convert (a>b?a:b) to std::max(a,b)

In this code
   int a;
   std::max<sal_uInt16>(a,0)
std::max will first convert a and b to sal_uInt16, therefore potentially
converting a negative number to a positive number due to the conversion
rules. Then it will take the larger number.

While this code
    int a;
    static_cast<sal_uInt16>(a > 0 ? a : 0)
will compare first, and then convert the larger number to sal_uInt16,
which might result in making a "a" that is larger than 2^16 into a
smaller value, but which will never convert a negative "a" value into a
positive value.

Change-Id: Id4f6df0089b1a74ea4ac1c5d05655e7c1d8f0c7f
Reviewed-on: https://gerrit.libreoffice.org/57846
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst ad7d72f0
...@@ -828,7 +828,7 @@ bool SwGrfNumPortion::Format( SwTextFormatInfo &rInf ) ...@@ -828,7 +828,7 @@ bool SwGrfNumPortion::Format( SwTextFormatInfo &rInf )
const bool bFull = rInf.Width() < rInf.X() + Width(); const bool bFull = rInf.Width() < rInf.X() + Width();
const bool bFly = rInf.GetFly() || const bool bFly = rInf.GetFly() ||
( rInf.GetLast() && rInf.GetLast()->IsFlyPortion() ); ( rInf.GetLast() && rInf.GetLast()->IsFlyPortion() );
SetAscent( std::max<sal_uInt16>(GetRelPos(), 0) ); SetAscent( GetRelPos() > 0 ? GetRelPos() : 0 );
if( GetAscent() > Height() ) if( GetAscent() > Height() )
Height( GetAscent() ); Height( GetAscent() );
......
...@@ -1700,8 +1700,8 @@ void SwView::StateTabWin(SfxItemSet& rSet) ...@@ -1700,8 +1700,8 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const int nRgt = (bTableVertical ? nPageHeight : nPageWidth) - const int nRgt = (bTableVertical ? nPageHeight : nPageWidth) -
(aTabCols.GetLeftMin() + aTabCols.GetRight()); (aTabCols.GetLeftMin() + aTabCols.GetRight());
const sal_uInt16 nL = std::max< sal_uInt16 >(nLft, 0); const sal_uInt16 nL = static_cast< sal_uInt16 >(std::max(nLft, 0));
const sal_uInt16 nR = std::max< sal_uInt16 >(nRgt, 0); const sal_uInt16 nR = static_cast< sal_uInt16 >(std::max(nRgt, 0));
SvxColumnItem aColItem(nNum, nL, nR); SvxColumnItem aColItem(nNum, nL, nR);
...@@ -1937,8 +1937,8 @@ void SwView::StateTabWin(SfxItemSet& rSet) ...@@ -1937,8 +1937,8 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const int nRgt = (bVerticalWriting ? nPageWidth : nPageHeight) - const int nRgt = (bVerticalWriting ? nPageWidth : nPageHeight) -
(aTabCols.GetLeftMin() + aTabCols.GetRight()); (aTabCols.GetLeftMin() + aTabCols.GetRight());
const sal_uInt16 nL = std::max< sal_uInt16 >(nLft, 0); const sal_uInt16 nL = static_cast< sal_uInt16 >(std::max(nLft, 0));
const sal_uInt16 nR = std::max< sal_uInt16 >(nRgt, 0); const sal_uInt16 nR = static_cast< sal_uInt16 >(std::max(nRgt, 0));
SvxColumnItem aColItem(0, nL, nR); SvxColumnItem aColItem(0, nL, nR);
...@@ -2011,8 +2011,8 @@ void SwView::StateTabWin(SfxItemSet& rSet) ...@@ -2011,8 +2011,8 @@ void SwView::StateTabWin(SfxItemSet& rSet)
const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft();
const int nRgt = nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight()); const int nRgt = nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight());
const sal_uInt16 nL = std::max< sal_uInt16 >(nLft, 0); const sal_uInt16 nL = static_cast< sal_uInt16 >(std::max(nLft, 0));
const sal_uInt16 nR = std::max< sal_uInt16 >(nRgt, 0); const sal_uInt16 nR = static_cast< sal_uInt16 >(std::max(nRgt, 0));
aRectangle.SetLeft( nL ); aRectangle.SetLeft( nL );
if(nNum > 1) if(nNum > 1)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment