diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-01-21 20:47:12 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-01-21 20:50:18 +0000 |
commit | d363a9e20db9b404ff81ca673268f2abef06e3f0 (patch) | |
tree | 5b9c1eccd821c0f048168f83989e254ed85c33f3 /vcl/headless | |
parent | 4f91e4f3f9e80b4b258f07d29cc2ea490d8e7417 (diff) |
new[] failed but memset of requested len called anyway
recent regression from
commit a73e606b8cd714520285b4e40890db9fd27d7ba5
Date: Thu Jan 21 16:04:28 2016 +0100
Quickfix for deterministic SvpSalBitmap checksums
move the memset (and similar memcpy) inside try block
Change-Id: I51d76777f91664459deb777a5dfafae80203af57
Diffstat (limited to 'vcl/headless')
-rw-r--r-- | vcl/headless/svpbmp.cxx | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx index 293b222b8f8f..59d5964a0977 100644 --- a/vcl/headless/svpbmp.cxx +++ b/vcl/headless/svpbmp.cxx @@ -121,17 +121,17 @@ BitmapBuffer* ImplCreateDIB( pDIB->maPalette.SetEntryCount( nColors ); } - auto size = pDIB->mnScanlineSize * pDIB->mnHeight; try { + size_t size = pDIB->mnScanlineSize * pDIB->mnHeight; pDIB->mpBits = new sal_uInt8[size]; + std::memset(pDIB->mpBits, 0, size); } catch (const std::bad_alloc&) { delete pDIB; pDIB = nullptr; } - std::memset(pDIB->mpBits, 0, size); } } else @@ -167,16 +167,15 @@ bool SvpSalBitmap::Create(const SalBitmap& rBmp) // TODO: get rid of this when BitmapBuffer gets copy constructor try { - mpDIB->mpBits = new sal_uInt8[ mpDIB->mnScanlineSize * mpDIB->mnHeight ]; + size_t size = mpDIB->mnScanlineSize * mpDIB->mnHeight; + mpDIB->mpBits = new sal_uInt8[size]; + std::memcpy(mpDIB->mpBits, rSalBmp.mpDIB->mpBits, size); } catch (const std::bad_alloc&) { delete mpDIB; mpDIB = nullptr; } - - if (mpDIB) - memcpy(mpDIB->mpBits, rSalBmp.mpDIB->mpBits, mpDIB->mnScanlineSize * mpDIB->mnHeight); } return !rSalBmp.mpDIB || (rSalBmp.mpDIB && mpDIB != nullptr); |