diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-31 16:45:14 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-08-31 16:47:55 +0100 |
commit | 4ce8c21a096d17be9cc40afe11f683c7b3d9fd70 (patch) | |
tree | 46ec8f314396ff2f8933642071e9dc248ed40e45 /vcl/source/gdi/bmpacc.cxx | |
parent | b15be387b163ef5e2e338c4701643aac152ec407 (diff) |
other bitmap methods check for bad_alloc
Change-Id: Ic1083fdb566de0b5487b92197f33070ef42146f7
Diffstat (limited to 'vcl/source/gdi/bmpacc.cxx')
-rw-r--r-- | vcl/source/gdi/bmpacc.cxx | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/vcl/source/gdi/bmpacc.cxx b/vcl/source/gdi/bmpacc.cxx index ef2983c19393..9917203f565a 100644 --- a/vcl/source/gdi/bmpacc.cxx +++ b/vcl/source/gdi/bmpacc.cxx @@ -127,16 +127,21 @@ BitmapReadAccess::~BitmapReadAccess() void BitmapReadAccess::ImplInitScanBuffer( Bitmap& rBitmap ) { + if (!mpBuffer) + return; + ImpBitmap* pImpBmp = rBitmap.ImplGetImpBitmap(); + if (!pImpBmp) + return; - if( pImpBmp && mpBuffer ) - { - const long nHeight = mpBuffer->mnHeight; - Scanline pTmpLine = mpBuffer->mpBits; + maColorMask = mpBuffer->maColorMask; + bool bOk(true); + const long nHeight = mpBuffer->mnHeight; + Scanline pTmpLine = mpBuffer->mpBits; + try + { mpScanBuf = new Scanline[ nHeight ]; - maColorMask = mpBuffer->maColorMask; - if( BMP_SCANLINE_ADJUSTMENT( mpBuffer->mnFormat ) == BMP_FORMAT_TOP_DOWN ) { for( long nY = 0L; nY < nHeight; nY++, pTmpLine += mpBuffer->mnScanlineSize ) @@ -147,15 +152,20 @@ void BitmapReadAccess::ImplInitScanBuffer( Bitmap& rBitmap ) for( long nY = nHeight - 1; nY >= 0; nY--, pTmpLine += mpBuffer->mnScanlineSize ) mpScanBuf[ nY ] = pTmpLine; } + bOk = ImplSetAccessPointers(BMP_SCANLINE_FORMAT(mpBuffer->mnFormat)); + } + catch (const std::bad_alloc&) + { + bOk = false; + } - if( !ImplSetAccessPointers( BMP_SCANLINE_FORMAT( mpBuffer->mnFormat ) ) ) - { - delete[] mpScanBuf; - mpScanBuf = NULL; + if (!bOk) + { + delete[] mpScanBuf; + mpScanBuf = NULL; - pImpBmp->ImplReleaseBuffer( mpBuffer, mnAccessMode ); - mpBuffer = NULL; - } + pImpBmp->ImplReleaseBuffer( mpBuffer, mnAccessMode ); + mpBuffer = NULL; } } |