summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/bmpacc.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-08-31 16:45:14 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-08-31 16:47:55 +0100
commit4ce8c21a096d17be9cc40afe11f683c7b3d9fd70 (patch)
tree46ec8f314396ff2f8933642071e9dc248ed40e45 /vcl/source/gdi/bmpacc.cxx
parentb15be387b163ef5e2e338c4701643aac152ec407 (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.cxx36
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;
}
}