summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2014-08-09 17:23:07 +0100
committerDavid Tardon <dtardon@redhat.com>2014-08-20 02:47:51 -0500
commit6f87560daba857baecb56617ac23b8960c71ad85 (patch)
treece39ebe07f58db4540751c168c6966132ae9eb3d /filter
parenta7eed1e17cfb101210db8aa839171f00d0730582 (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.cxx31
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++ )