Kaydet (Commit) 7d7c7c44 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

UBSan-detected overflow when nWidthPixel is LONG_MAX and rCurrentZoom is 1

...from the call to

 SetColumnWidth( nId, LONG_MAX );

in BrowseBox::AutoSizeLastColumn(), e.g. happens when opening the Gallery in
Draw.

Change-Id: I151ae557d9d2bec52ecb0bd92b870fb0b91d7242
üst 911f3a12
...@@ -124,12 +124,21 @@ BrowserColumn::~BrowserColumn() ...@@ -124,12 +124,21 @@ BrowserColumn::~BrowserColumn()
void BrowserColumn::SetWidth(sal_uLong nNewWidthPixel, const Fraction& rCurrentZoom) void BrowserColumn::SetWidth(sal_uLong nNewWidthPixel, const Fraction& rCurrentZoom)
{ {
_nWidth = nNewWidthPixel; _nWidth = nNewWidthPixel;
double n = (double)_nWidth; // Avoid overflow when called with LONG_MAX from
n *= (double)rCurrentZoom.GetDenominator(); // BrowseBox::AutoSizeLastColumn:
if (!rCurrentZoom.GetNumerator()) if (_nWidth == LONG_MAX)
throw o3tl::divide_by_zero(); {
n /= (double)rCurrentZoom.GetNumerator(); _nOriginalWidth = _nWidth;
_nOriginalWidth = n>0 ? (long)(n+0.5) : -(long)(-n+0.5); }
else
{
double n = (double)_nWidth;
n *= (double)rCurrentZoom.GetDenominator();
if (!rCurrentZoom.GetNumerator())
throw o3tl::divide_by_zero();
n /= (double)rCurrentZoom.GetNumerator();
_nOriginalWidth = n>0 ? (long)(n+0.5) : -(long)(-n+0.5);
}
} }
void BrowserColumn::Draw( BrowseBox& rBox, OutputDevice& rDev, const Point& rPos, bool bCurs ) void BrowserColumn::Draw( BrowseBox& rBox, OutputDevice& rDev, const Point& rPos, bool bCurs )
......
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