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

no need to assign a nullptr after a bad_alloc

since if the allocation failed, the assignment would never happen

Also use early exit to simplify the code in X11SalBitmap::ImplCreateDIB

Change-Id: I73301bfad6492c2b42c08744c24cfb78237983f0
Reviewed-on: https://gerrit.libreoffice.org/38346Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 70c477e8
...@@ -64,11 +64,8 @@ BitmapBuffer* ImplCreateDIB( ...@@ -64,11 +64,8 @@ BitmapBuffer* ImplCreateDIB(
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
pDIB = nullptr;
}
if(!pDIB)
return nullptr; return nullptr;
}
const sal_uInt16 nColors = ( nBitCount <= 8 ) ? ( 1 << nBitCount ) : 0; const sal_uInt16 nColors = ( nBitCount <= 8 ) ? ( 1 << nBitCount ) : 0;
......
...@@ -135,105 +135,100 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( ...@@ -135,105 +135,100 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB(
BitmapBuffer* pDIB = nullptr; BitmapBuffer* pDIB = nullptr;
if( rSize.Width() && rSize.Height() ) if( !rSize.Width() || !rSize.Height() )
return nullptr;
try
{ {
try pDIB = new BitmapBuffer;
{ }
pDIB = new BitmapBuffer; catch (const std::bad_alloc&)
} {
catch (const std::bad_alloc&) return nullptr;
{ }
pDIB = nullptr;
}
if( pDIB ) const sal_uInt16 nColors = ( nBitCount <= 8 ) ? ( 1 << nBitCount ) : 0;
{
const sal_uInt16 nColors = ( nBitCount <= 8 ) ? ( 1 << nBitCount ) : 0;
pDIB->mnFormat = ScanlineFormat::NONE; pDIB->mnFormat = ScanlineFormat::NONE;
switch( nBitCount ) switch( nBitCount )
{ {
case 1: pDIB->mnFormat |= ScanlineFormat::N1BitMsbPal; break; case 1: pDIB->mnFormat |= ScanlineFormat::N1BitMsbPal; break;
case 4: pDIB->mnFormat |= ScanlineFormat::N4BitMsnPal; break; case 4: pDIB->mnFormat |= ScanlineFormat::N4BitMsnPal; break;
case 8: pDIB->mnFormat |= ScanlineFormat::N8BitPal; break; case 8: pDIB->mnFormat |= ScanlineFormat::N8BitPal; break;
#ifdef OSL_BIGENDIAN #ifdef OSL_BIGENDIAN
case 16: case 16:
{ {
pDIB->mnFormat|= ScanlineFormat::N16BitTcMsbMask; pDIB->mnFormat|= ScanlineFormat::N16BitTcMsbMask;
ColorMaskElement aRedMask(0xf800); ColorMaskElement aRedMask(0xf800);
aRedMask.CalcMaskShift(); aRedMask.CalcMaskShift();
ColorMaskElement aGreenMask(0x07e0); ColorMaskElement aGreenMask(0x07e0);
aGreenMask.CalcMaskShift(); aGreenMask.CalcMaskShift();
ColorMaskElement aBlueMask(0x001f); ColorMaskElement aBlueMask(0x001f);
aBlueMask.CalcMaskShift(); aBlueMask.CalcMaskShift();
pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
break; break;
} }
#else #else
case 16: case 16:
{ {
pDIB->mnFormat|= ScanlineFormat::N16BitTcLsbMask; pDIB->mnFormat|= ScanlineFormat::N16BitTcLsbMask;
ColorMaskElement aRedMask(0xf800); ColorMaskElement aRedMask(0xf800);
aRedMask.CalcMaskShift(); aRedMask.CalcMaskShift();
ColorMaskElement aGreenMask(0x07e0); ColorMaskElement aGreenMask(0x07e0);
aGreenMask.CalcMaskShift(); aGreenMask.CalcMaskShift();
ColorMaskElement aBlueMask(0x001f); ColorMaskElement aBlueMask(0x001f);
aBlueMask.CalcMaskShift(); aBlueMask.CalcMaskShift();
pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
break; break;
} }
#endif #endif
default: default:
nBitCount = 24; nBitCount = 24;
SAL_FALLTHROUGH; SAL_FALLTHROUGH;
case 24: case 24:
pDIB->mnFormat |= ScanlineFormat::N24BitTcBgr; pDIB->mnFormat |= ScanlineFormat::N24BitTcBgr;
break; break;
} }
pDIB->mnWidth = rSize.Width(); pDIB->mnWidth = rSize.Width();
pDIB->mnHeight = rSize.Height(); pDIB->mnHeight = rSize.Height();
long nScanlineBase; long nScanlineBase;
bool bFail = o3tl::checked_multiply<long>(pDIB->mnWidth, nBitCount, nScanlineBase); bool bFail = o3tl::checked_multiply<long>(pDIB->mnWidth, nBitCount, nScanlineBase);
if (bFail) if (bFail)
{ {
SAL_WARN("vcl.gdi", "checked multiply failed"); SAL_WARN("vcl.gdi", "checked multiply failed");
delete pDIB; delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
if (pDIB->mnScanlineSize < nScanlineBase/8) if (pDIB->mnScanlineSize < nScanlineBase/8)
{ {
SAL_WARN("vcl.gdi", "scanline calculation wraparound"); SAL_WARN("vcl.gdi", "scanline calculation wraparound");
delete pDIB; delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnBitCount = nBitCount; pDIB->mnBitCount = nBitCount;
if( nColors ) if( nColors )
{ {
pDIB->maPalette = rPal; pDIB->maPalette = rPal;
pDIB->maPalette.SetEntryCount( nColors ); pDIB->maPalette.SetEntryCount( nColors );
} }
try try
{ {
pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ]; pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ];
#if defined HAVE_VALGRIND_HEADERS #if defined HAVE_VALGRIND_HEADERS
if (RUNNING_ON_VALGRIND) if (RUNNING_ON_VALGRIND)
blankExtraSpace(pDIB); blankExtraSpace(pDIB);
#endif #endif
}
catch (const std::bad_alloc&)
{
delete pDIB;
pDIB = nullptr;
}
}
} }
else catch (const std::bad_alloc&)
{
delete pDIB;
pDIB = nullptr; pDIB = nullptr;
}
return pDIB; return pDIB;
} }
......
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