vcl/headless/svpbmp.cxx | 5 - vcl/unx/generic/gdi/salbmp.cxx | 165 +++++++++++++++++++---------------------- 2 files changed, 81 insertions(+), 89 deletions(-)
New commits: commit 5c0cee64b9430da404fa52988871fae6a5dd9f41 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Fri Jun 2 11:04:41 2017 +0200 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/38346 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx index 5be976fc9e74..15c6fc9c1022 100644 --- a/vcl/headless/svpbmp.cxx +++ b/vcl/headless/svpbmp.cxx @@ -64,11 +64,8 @@ BitmapBuffer* ImplCreateDIB( } catch (const std::bad_alloc&) { - pDIB = nullptr; - } - - if(!pDIB) return nullptr; + } const sal_uInt16 nColors = ( nBitCount <= 8 ) ? ( 1 << nBitCount ) : 0; diff --git a/vcl/unx/generic/gdi/salbmp.cxx b/vcl/unx/generic/gdi/salbmp.cxx index 00043d5e783e..8401fa8e3b24 100644 --- a/vcl/unx/generic/gdi/salbmp.cxx +++ b/vcl/unx/generic/gdi/salbmp.cxx @@ -135,105 +135,100 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( BitmapBuffer* pDIB = nullptr; - if( rSize.Width() && rSize.Height() ) + if( !rSize.Width() || !rSize.Height() ) + return nullptr; + + try { - try - { - pDIB = new BitmapBuffer; - } - catch (const std::bad_alloc&) - { - pDIB = nullptr; - } + pDIB = new BitmapBuffer; + } + catch (const std::bad_alloc&) + { + return 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 ) - { - case 1: pDIB->mnFormat |= ScanlineFormat::N1BitMsbPal; break; - case 4: pDIB->mnFormat |= ScanlineFormat::N4BitMsnPal; break; - case 8: pDIB->mnFormat |= ScanlineFormat::N8BitPal; break; + switch( nBitCount ) + { + case 1: pDIB->mnFormat |= ScanlineFormat::N1BitMsbPal; break; + case 4: pDIB->mnFormat |= ScanlineFormat::N4BitMsnPal; break; + case 8: pDIB->mnFormat |= ScanlineFormat::N8BitPal; break; #ifdef OSL_BIGENDIAN - case 16: - { - pDIB->mnFormat|= ScanlineFormat::N16BitTcMsbMask; - ColorMaskElement aRedMask(0xf800); - aRedMask.CalcMaskShift(); - ColorMaskElement aGreenMask(0x07e0); - aGreenMask.CalcMaskShift(); - ColorMaskElement aBlueMask(0x001f); - aBlueMask.CalcMaskShift(); - pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); - break; - } + case 16: + { + pDIB->mnFormat|= ScanlineFormat::N16BitTcMsbMask; + ColorMaskElement aRedMask(0xf800); + aRedMask.CalcMaskShift(); + ColorMaskElement aGreenMask(0x07e0); + aGreenMask.CalcMaskShift(); + ColorMaskElement aBlueMask(0x001f); + aBlueMask.CalcMaskShift(); + pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); + break; + } #else - case 16: - { - pDIB->mnFormat|= ScanlineFormat::N16BitTcLsbMask; - ColorMaskElement aRedMask(0xf800); - aRedMask.CalcMaskShift(); - ColorMaskElement aGreenMask(0x07e0); - aGreenMask.CalcMaskShift(); - ColorMaskElement aBlueMask(0x001f); - aBlueMask.CalcMaskShift(); - pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); - break; - } + case 16: + { + pDIB->mnFormat|= ScanlineFormat::N16BitTcLsbMask; + ColorMaskElement aRedMask(0xf800); + aRedMask.CalcMaskShift(); + ColorMaskElement aGreenMask(0x07e0); + aGreenMask.CalcMaskShift(); + ColorMaskElement aBlueMask(0x001f); + aBlueMask.CalcMaskShift(); + pDIB->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); + break; + } #endif - default: - nBitCount = 24; - SAL_FALLTHROUGH; - case 24: - pDIB->mnFormat |= ScanlineFormat::N24BitTcBgr; - break; - } + default: + nBitCount = 24; + SAL_FALLTHROUGH; + case 24: + pDIB->mnFormat |= ScanlineFormat::N24BitTcBgr; + break; + } - pDIB->mnWidth = rSize.Width(); - pDIB->mnHeight = rSize.Height(); - long nScanlineBase; - bool bFail = o3tl::checked_multiply<long>(pDIB->mnWidth, nBitCount, nScanlineBase); - if (bFail) - { - SAL_WARN("vcl.gdi", "checked multiply failed"); - delete pDIB; - return nullptr; - } - pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); - if (pDIB->mnScanlineSize < nScanlineBase/8) - { - SAL_WARN("vcl.gdi", "scanline calculation wraparound"); - delete pDIB; - return nullptr; - } - pDIB->mnBitCount = nBitCount; + pDIB->mnWidth = rSize.Width(); + pDIB->mnHeight = rSize.Height(); + long nScanlineBase; + bool bFail = o3tl::checked_multiply<long>(pDIB->mnWidth, nBitCount, nScanlineBase); + if (bFail) + { + SAL_WARN("vcl.gdi", "checked multiply failed"); + delete pDIB; + return nullptr; + } + pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); + if (pDIB->mnScanlineSize < nScanlineBase/8) + { + SAL_WARN("vcl.gdi", "scanline calculation wraparound"); + delete pDIB; + return nullptr; + } + pDIB->mnBitCount = nBitCount; - if( nColors ) - { - pDIB->maPalette = rPal; - pDIB->maPalette.SetEntryCount( nColors ); - } + if( nColors ) + { + pDIB->maPalette = rPal; + pDIB->maPalette.SetEntryCount( nColors ); + } - try - { - pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ]; + try + { + pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ]; #if defined HAVE_VALGRIND_HEADERS - if (RUNNING_ON_VALGRIND) - blankExtraSpace(pDIB); + if (RUNNING_ON_VALGRIND) + blankExtraSpace(pDIB); #endif - } - catch (const std::bad_alloc&) - { - delete pDIB; - pDIB = nullptr; - } - } } - else + catch (const std::bad_alloc&) + { + delete pDIB; pDIB = nullptr; + } return pDIB; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits