diff options
author | Caolán McNamara <caolanm@redhat.com> | 2014-08-09 17:23:07 +0100 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2014-08-20 02:47:51 -0500 |
commit | 6f87560daba857baecb56617ac23b8960c71ad85 (patch) | |
tree | ce39ebe07f58db4540751c168c6966132ae9eb3d /filter | |
parent | a7eed1e17cfb101210db8aa839171f00d0730582 (diff) |
valgrind + bff: Integer divide by zero
Change-Id: I4c47d17a421f1c6d2d6cc29c7b92ec930bdf901f
(cherry picked from commit a1fab361cb3325b2d012942e43660f2c0a2a4b96)
Reviewed-on: https://gerrit.libreoffice.org/11021
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
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 061592b5005f..f708435af1e1 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++ ) |