[Libreoffice-commits] core.git: filter/source

Caolán McNamara caolanm at redhat.com
Sat Aug 9 09:33:03 PDT 2014


 filter/source/graphicfilter/itiff/itiff.cxx |   31 +++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

New commits:
commit a1fab361cb3325b2d012942e43660f2c0a2a4b96
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat Aug 9 17:23:07 2014 +0100

    valgrind + bff: Integer divide by zero
    
    Change-Id: I4c47d17a421f1c6d2d6cc29c7b92ec930bdf901f

diff --git a/filter/source/graphicfilter/itiff/itiff.cxx b/filter/source/graphicfilter/itiff/itiff.cxx
index 6ece188..1eb4c8a 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++ )


More information about the Libreoffice-commits mailing list