diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-02 10:56:05 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-03-02 10:56:05 +0000 |
commit | 28f820c1a0d8bbe7705d6c43a7c5c4a98bef0cbd (patch) | |
tree | 0d343fad96c711c9ca054d629f50c87ee84c4e2a /filter/source/graphicfilter/ipbm/ipbm.cxx | |
parent | c985cda80b54a4c951974bef77398b83eccc7d62 (diff) |
ofz: don't alloc for bitmap where there isn't enough data to fill
Change-Id: Ief236828f564ff81bf3a415127413b6cc72fd70d
Diffstat (limited to 'filter/source/graphicfilter/ipbm/ipbm.cxx')
-rw-r--r-- | filter/source/graphicfilter/ipbm/ipbm.cxx | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/filter/source/graphicfilter/ipbm/ipbm.cxx b/filter/source/graphicfilter/ipbm/ipbm.cxx index 13241aa92652..aeb974c5b6b4 100644 --- a/filter/source/graphicfilter/ipbm/ipbm.cxx +++ b/filter/source/graphicfilter/ipbm/ipbm.cxx @@ -85,7 +85,13 @@ bool PBMReader::ReadPBM(Graphic & rGraphic ) // 0->PBM, 1->PGM, 2->PPM switch ( mnMode ) { - case 0 : + case 0: + { + const size_t nRemainingSize = mrPBM.remainingSize(); + const size_t nDataRequired = mnWidth * (mnHeight / 8); + if (nRemainingSize < nDataRequired) + return false; + maBmp = Bitmap( Size( mnWidth, mnHeight ), 1 ); mpAcc = maBmp.AcquireWriteAccess(); if (!mpAcc || mpAcc->Width() != mnWidth || mpAcc->Height() != mnHeight) @@ -94,7 +100,7 @@ bool PBMReader::ReadPBM(Graphic & rGraphic ) mpAcc->SetPaletteColor( 0, BitmapColor( 0xff, 0xff, 0xff ) ); mpAcc->SetPaletteColor( 1, BitmapColor( 0x00, 0x00, 0x00 ) ); break; - + } case 1 : if ( mnMaxVal <= 1 ) maBmp = Bitmap( Size( mnWidth, mnHeight ), 1); |