diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-08-09 17:23:07 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-08-09 17:31:34 +0100 |
commit | a1fab361cb3325b2d012942e43660f2c0a2a4b96 (patch) | |
tree | cd47dadb808ee7b372d49b4d00cfcabb1a2900be /filter | |
parent | 273ed07a5779da84a3c7055866139bd422559818 (diff) |
valgrind + bff: Integer divide by zero
Change-Id: I4c47d17a421f1c6d2d6cc29c7b92ec930bdf901f
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/graphicfilter/itiff/itiff.cxx | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/filter/source/graphicfilter/itiff/itiff.cxx b/filter/source/graphicfilter/itiff/itiff.cxx index 6ece188a0810..1eb4c8a60756 100644 --- a/filter/source/graphicfilter/itiff/itiff.cxx +++ b/filter/source/graphicfilter/itiff/itiff.cxx @@ -176,6 +176,19 @@ public: delete pAlphaMask; } + sal_uLong GetRowsPerStrip() const + { + //Rows Per Strip: + // + //(TIFF format only) The number of rows of pixels per strip to use for + //encoding the TIFF image. A value greater than zero specifies the + //number of rows per strip. A value of 0 sets the rows per strip equal + //to the image length, resulting in a single strip. A value of -1 (the + //default) sets the rows per strip equal to infinity, resulting in a + //single strip. + return nRowsPerStrip == 0 ? nImageLength : nRowsPerStrip; + } + bool ReadTIFF( SvStream & rTIFF, Graphic & rGraphic ); }; @@ -539,10 +552,10 @@ bool TIFFReader::ReadMap( sal_uLong nMinPercent, sal_uLong nMaxPercent ) { for ( np = 0; np < nPlanes; np++ ) { - nStrip = ny / nRowsPerStrip + np * nStripsPerPlane; + nStrip = ny / GetRowsPerStrip() + np * nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; - pTIFF->Seek( pStripOffsets[ nStrip ] + ( ny % nRowsPerStrip ) * nStripBytesPerRow ); + pTIFF->Seek( pStripOffsets[ nStrip ] + ( ny % GetRowsPerStrip() ) * nStripBytesPerRow ); pTIFF->Read( pMap[ np ], nBytesPerRow ); if ( pTIFF->GetError() ) return false; @@ -593,9 +606,9 @@ bool TIFFReader::ReadMap( sal_uLong nMinPercent, sal_uLong nMaxPercent ) { for ( np = 0; np < nPlanes; np++ ) { - if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip ) + if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { - nStrip=ny/nRowsPerStrip+np*nStripsPerPlane; + nStrip=ny/GetRowsPerStrip()+np*nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek( pStripOffsets[ nStrip ] ); @@ -624,9 +637,9 @@ bool TIFFReader::ReadMap( sal_uLong nMinPercent, sal_uLong nMaxPercent ) { for ( np = 0; np < nPlanes; np++ ) { - if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip ) + if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { - nStrip = ny / nRowsPerStrip + np * nStripsPerPlane; + nStrip = ny / GetRowsPerStrip() + np * nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek(pStripOffsets[nStrip]); @@ -652,9 +665,9 @@ bool TIFFReader::ReadMap( sal_uLong nMinPercent, sal_uLong nMaxPercent ) { for ( np = 0; np < nPlanes; np++ ) { - if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip ) + if ( ny / GetRowsPerStrip() + np * nStripsPerPlane > nStrip ) { - nStrip=ny/nRowsPerStrip+np*nStripsPerPlane; + nStrip=ny/GetRowsPerStrip()+np*nStripsPerPlane; if ( nStrip >= nNumStripOffsets ) return false; pTIFF->Seek(pStripOffsets[nStrip]); @@ -1310,7 +1323,7 @@ bool TIFFReader::ReadTIFF(SvStream & rTIFF, Graphic & rGraphic ) if ( ( nFillOrder == 2 ) && ( nCompression != 5 ) ) // in the LZW mode bits are already being inverted bByteSwap = true; - nStripsPerPlane = ( nImageLength - 1 ) / nRowsPerStrip + 1; + nStripsPerPlane = ( nImageLength - 1 ) / GetRowsPerStrip() + 1; nBytesPerRow = ( nImageWidth * nSamplesPerPixel / nPlanes * nBitsPerSample + 7 ) >> 3; for ( sal_uLong j = 0; j < 4; j++ ) |