diff options
-rw-r--r-- | vcl/source/filter/graphicfilter2.cxx | 182 |
1 files changed, 98 insertions, 84 deletions
diff --git a/vcl/source/filter/graphicfilter2.cxx b/vcl/source/filter/graphicfilter2.cxx index a9a4813a91d0..4f8e8fcee984 100644 --- a/vcl/source/filter/graphicfilter2.cxx +++ b/vcl/source/filter/graphicfilter2.cxx @@ -105,7 +105,7 @@ void GraphicDescriptor::ImpConstruct() sal_Bool GraphicDescriptor::ImpDetectBMP( SvStream& rStm, sal_Bool bExtendedInfo ) { - sal_uInt16 nTemp16; + sal_uInt16 nTemp16 = 0; sal_Bool bRet = sal_False; sal_Int32 nStmPos = rStm.Tell(); @@ -178,10 +178,10 @@ sal_Bool GraphicDescriptor::ImpDetectBMP( SvStream& rStm, sal_Bool bExtendedInfo sal_Bool GraphicDescriptor::ImpDetectGIF( SvStream& rStm, sal_Bool bExtendedInfo ) { - sal_uInt32 n32; - sal_uInt16 n16; + sal_uInt32 n32 = 0; + sal_uInt16 n16 = 0; sal_Bool bRet = sal_False; - sal_uInt8 cByte; + sal_uInt8 cByte = 0; sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); @@ -197,7 +197,7 @@ sal_Bool GraphicDescriptor::ImpDetectGIF( SvStream& rStm, sal_Bool bExtendedInfo if ( bExtendedInfo ) { - sal_uInt16 nTemp16; + sal_uInt16 nTemp16 = 0; // Pixel width rStm >> nTemp16; @@ -245,7 +245,7 @@ sal_uInt8 ImpDetectJPG_GetNextMarker( SvStream& rStm ) sal_Bool GraphicDescriptor::ImpDetectJPG( SvStream& rStm, sal_Bool bExtendedInfo ) { - sal_uInt32 nTemp32; + sal_uInt32 nTemp32 = 0; sal_Bool bRet = sal_False; sal_Int32 nStmPos = rStm.Tell(); @@ -297,7 +297,7 @@ sal_Bool GraphicDescriptor::ImpDetectJPG( SvStream& rStm, sal_Bool bExtendedInf // per default we assume marker segments conaining a length parameter default : { - sal_uInt16 nLength; + sal_uInt16 nLength = 0; rStm >> nLength; if ( nLength < 2 ) @@ -311,18 +311,18 @@ sal_Bool GraphicDescriptor::ImpDetectJPG( SvStream& rStm, sal_Bool bExtendedInf { if ( nLength == 16 ) { - sal_Int32 nIdentifier; + sal_Int32 nIdentifier = 0; rStm >> nIdentifier; if ( nIdentifier == 0x4a464946 ) // JFIF Identifier { - sal_uInt8 nStringTerminator; - sal_uInt8 nMajorRevision; - sal_uInt8 nMinorRevision; - sal_uInt8 nUnits; - sal_uInt16 nHorizontalResolution; - sal_uInt16 nVerticalResolution; - sal_uInt8 nHorzThumbnailPixelCount; - sal_uInt8 nVertThumbnailPixelCount; + sal_uInt8 nStringTerminator = 0; + sal_uInt8 nMajorRevision = 0; + sal_uInt8 nMinorRevision = 0; + sal_uInt8 nUnits = 0; + sal_uInt16 nHorizontalResolution = 0; + sal_uInt16 nVerticalResolution = 0; + sal_uInt8 nHorzThumbnailPixelCount = 0; + sal_uInt8 nVertThumbnailPixelCount = 0; rStm >> nStringTerminator >> nMajorRevision @@ -362,13 +362,13 @@ sal_Bool GraphicDescriptor::ImpDetectJPG( SvStream& rStm, sal_Bool bExtendedInf case 0xce : // SOF14 case 0xcf : // SOF15 { - sal_uInt8 nSamplePrecision; - sal_uInt16 nNumberOfLines; - sal_uInt16 nSamplesPerLine; - sal_uInt8 nNumberOfImageComponents; - sal_uInt8 nComponentsIdentifier; - sal_uInt8 nHorizontalSamplingFactor; - sal_uInt8 nQuantizationTableDestinationSelector; + sal_uInt8 nSamplePrecision = 0; + sal_uInt16 nNumberOfLines = 0; + sal_uInt16 nSamplesPerLine = 0; + sal_uInt8 nNumberOfImageComponents = 0; + sal_uInt8 nComponentsIdentifier = 0; + sal_uInt8 nHorizontalSamplingFactor = 0; + sal_uInt8 nQuantizationTableDestinationSelector = 0; rStm >> nSamplePrecision >> nNumberOfLines >> nSamplesPerLine @@ -407,9 +407,9 @@ sal_Bool GraphicDescriptor::ImpDetectPCD( SvStream& rStm, sal_Bool ) sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); - sal_uInt32 nTemp32; - sal_uInt16 nTemp16; - sal_uInt8 cByte; + sal_uInt32 nTemp32 = 0; + sal_uInt16 nTemp16 = 0; + sal_uInt8 cByte = 0; rStm.SeekRel( 2048 ); rStm >> nTemp32; @@ -430,13 +430,13 @@ sal_Bool GraphicDescriptor::ImpDetectPCD( SvStream& rStm, sal_Bool ) sal_Bool GraphicDescriptor::ImpDetectPCX( SvStream& rStm, sal_Bool bExtendedInfo ) { // ! Because 0x0a can be interpreted as LF too ... - // we cant be shure that this special sign represent a PCX file only. + // we cant be sure that this special sign represent a PCX file only. // Every Ascii file is possible here :-( // We must detect the whole header. bExtendedInfo = sal_True; sal_Bool bRet = sal_False; - sal_uInt8 cByte; + sal_uInt8 cByte = 0; sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); @@ -465,43 +465,45 @@ sal_Bool GraphicDescriptor::ImpDetectPCX( SvStream& rStm, sal_Bool bExtendedInfo bCompressed = ( cByte > 0 ); bRet = (cByte==0 || cByte ==1); + if (bRet) + { + // Bits/Pixel + rStm >> cByte; + nBitsPerPixel = cByte; - // Bits/Pixel - rStm >> cByte; - nBitsPerPixel = cByte; - - // image dimensions - rStm >> nTemp16; - nXmin = nTemp16; - rStm >> nTemp16; - nYmin = nTemp16; - rStm >> nTemp16; - nXmax = nTemp16; - rStm >> nTemp16; - nYmax = nTemp16; - - aPixSize.Width() = nXmax - nXmin + 1; - aPixSize.Height() = nYmax - nYmin + 1; + // image dimensions + rStm >> nTemp16; + nXmin = nTemp16; + rStm >> nTemp16; + nYmin = nTemp16; + rStm >> nTemp16; + nXmax = nTemp16; + rStm >> nTemp16; + nYmax = nTemp16; - // resolution - rStm >> nTemp16; - nDPIx = nTemp16; - rStm >> nTemp16; - nDPIy = nTemp16; + aPixSize.Width() = nXmax - nXmin + 1; + aPixSize.Height() = nYmax - nYmin + 1; - // set logical size - MapMode aMap( MAP_INCH, Point(), - Fraction( 1, nDPIx ), Fraction( 1, nDPIy ) ); - aLogSize = OutputDevice::LogicToLogic( aPixSize, aMap, - MapMode( MAP_100TH_MM ) ); + // resolution + rStm >> nTemp16; + nDPIx = nTemp16; + rStm >> nTemp16; + nDPIy = nTemp16; + // set logical size + MapMode aMap( MAP_INCH, Point(), + Fraction( 1, nDPIx ), Fraction( 1, nDPIy ) ); + aLogSize = OutputDevice::LogicToLogic( aPixSize, aMap, + MapMode( MAP_100TH_MM ) ); - // number of color planes - rStm.SeekRel( 49 ); - rStm >> cByte; - nPlanes = cByte; + // number of color planes + cByte = 5; // Illegal value in case of EOF. + rStm.SeekRel( 49 ); + rStm >> cByte; + nPlanes = cByte; - bRet = (nPlanes<=4); + bRet = (nPlanes<=4); + } } } @@ -511,7 +513,7 @@ sal_Bool GraphicDescriptor::ImpDetectPCX( SvStream& rStm, sal_Bool bExtendedInfo sal_Bool GraphicDescriptor::ImpDetectPNG( SvStream& rStm, sal_Bool bExtendedInfo ) { - sal_uInt32 nTemp32; + sal_uInt32 nTemp32 = 0; sal_Bool bRet = sal_False; sal_Int32 nStmPos = rStm.Tell(); @@ -528,7 +530,7 @@ sal_Bool GraphicDescriptor::ImpDetectPNG( SvStream& rStm, sal_Bool bExtendedInfo if ( bExtendedInfo ) { - sal_uInt8 cByte; + sal_uInt8 cByte = 0; // IHDR-Chunk rStm.SeekRel( 8 ); @@ -550,34 +552,40 @@ sal_Bool GraphicDescriptor::ImpDetectPNG( SvStream& rStm, sal_Bool bExtendedInfo nPlanes = 1; bCompressed = sal_True; - sal_uInt32 nLen32; + sal_uInt32 nLen32 = 0; + nTemp32 = 0; rStm.SeekRel( 8 ); // read up to the pHYs-Chunk or the start of the image rStm >> nLen32; rStm >> nTemp32; - while( ( nTemp32 != 0x70485973 ) && ( nTemp32 != 0x49444154 ) ) + while( ( nTemp32 != 0x70485973 ) && ( nTemp32 != 0x49444154 ) + && !rStm.IsEof() && !rStm.GetError() ) { rStm.SeekRel( 4 + nLen32 ); rStm >> nLen32; rStm >> nTemp32; } - if ( nTemp32 == 0x70485973 ) + if ( nTemp32 == 0x70485973 + && !rStm.IsEof() && !rStm.GetError() ) { sal_uLong nXRes; sal_uLong nYRes; // horizontal resolution + nTemp32 = 0; rStm >> nTemp32; nXRes = nTemp32; // vertical resolution + nTemp32 = 0; rStm >> nTemp32; nYRes = nTemp32; // unit + cByte = 0; rStm >> cByte; if ( cByte ) @@ -602,8 +610,8 @@ sal_Bool GraphicDescriptor::ImpDetectTIF( SvStream& rStm, sal_Bool bExtendedInfo { bool bDetectOk = false; sal_Bool bRet = sal_False; - sal_uInt8 cByte1; - sal_uInt8 cByte2; + sal_uInt8 cByte1 = 0; + sal_uInt8 cByte2 = 1; sal_Int32 nStmPos = rStm.Tell(); rStm >> cByte1; @@ -623,7 +631,7 @@ sal_Bool GraphicDescriptor::ImpDetectTIF( SvStream& rStm, sal_Bool bExtendedInfo if ( bDetectOk ) { - sal_uInt16 nTemp16; + sal_uInt16 nTemp16 = 0; rStm >> nTemp16; if ( nTemp16 == 0x2a ) @@ -635,7 +643,7 @@ sal_Bool GraphicDescriptor::ImpDetectTIF( SvStream& rStm, sal_Bool bExtendedInfo { sal_uLong nCount; sal_uLong nMax = DATA_SIZE - 48; - sal_uInt32 nTemp32; + sal_uInt32 nTemp32 = 0; bool bOk = false; // Offset of the first IFD @@ -757,7 +765,7 @@ sal_Bool GraphicDescriptor::ImpDetectPBM( SvStream& rStm, sal_Bool ) else { sal_Int32 nStmPos = rStm.Tell(); - sal_uInt8 nFirst, nSecond; + sal_uInt8 nFirst = 0, nSecond = 0; rStm >> nFirst >> nSecond; if ( nFirst == 'P' && ( ( nSecond == '1' ) || ( nSecond == '4' ) ) ) bRet = sal_True; @@ -778,7 +786,7 @@ sal_Bool GraphicDescriptor::ImpDetectPGM( SvStream& rStm, sal_Bool ) bRet = sal_True; else { - sal_uInt8 nFirst, nSecond; + sal_uInt8 nFirst = 0, nSecond = 0; sal_Int32 nStmPos = rStm.Tell(); rStm >> nFirst >> nSecond; if ( nFirst == 'P' && ( ( nSecond == '2' ) || ( nSecond == '5' ) ) ) @@ -800,7 +808,7 @@ sal_Bool GraphicDescriptor::ImpDetectPPM( SvStream& rStm, sal_Bool ) bRet = sal_True; else { - sal_uInt8 nFirst, nSecond; + sal_uInt8 nFirst = 0, nSecond = 0; sal_Int32 nStmPos = rStm.Tell(); rStm >> nFirst >> nSecond; if ( nFirst == 'P' && ( ( nSecond == '3' ) || ( nSecond == '6' ) ) ) @@ -816,7 +824,7 @@ sal_Bool GraphicDescriptor::ImpDetectPPM( SvStream& rStm, sal_Bool ) sal_Bool GraphicDescriptor::ImpDetectRAS( SvStream& rStm, sal_Bool ) { - sal_uInt32 nMagicNumber; + sal_uInt32 nMagicNumber = 0; sal_Bool bRet = sal_False; sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN ); @@ -843,24 +851,24 @@ sal_Bool GraphicDescriptor::ImpDetectPSD( SvStream& rStm, sal_Bool bExtendedInfo { sal_Bool bRet = sal_False; - sal_uInt32 nMagicNumber; + sal_uInt32 nMagicNumber = 0; sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN ); rStm >> nMagicNumber; if ( nMagicNumber == 0x38425053 ) { - sal_uInt16 nVersion; + sal_uInt16 nVersion = 0; rStm >> nVersion; if ( nVersion == 1 ) { bRet = sal_True; if ( bExtendedInfo ) { - sal_uInt16 nChannels; - sal_uInt32 nRows; - sal_uInt32 nColumns; - sal_uInt16 nDepth; - sal_uInt16 nMode; + sal_uInt16 nChannels = 0; + sal_uInt32 nRows = 0; + sal_uInt32 nColumns = 0; + sal_uInt16 nDepth = 0; + sal_uInt16 nMode = 0; rStm.SeekRel( 6 ); // Pad rStm >> nChannels >> nRows >> nColumns >> nDepth >> nMode; if ( ( nDepth == 1 ) || ( nDepth == 8 ) || ( nDepth == 16 ) ) @@ -895,9 +903,10 @@ sal_Bool GraphicDescriptor::ImpDetectPSD( SvStream& rStm, sal_Bool bExtendedInfo sal_Bool GraphicDescriptor::ImpDetectEPS( SvStream& rStm, sal_Bool ) { // check the EPS preview and the file extension - sal_uInt32 nFirstLong; + sal_uInt32 nFirstLong = 0; sal_uInt8 nFirstBytes[20]; sal_Bool bRet = sal_False; + memset(nFirstBytes, 0, sizeof (nFirstBytes)); sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN ); @@ -965,7 +974,7 @@ sal_Bool GraphicDescriptor::ImpDetectSGF( SvStream& rStm, sal_Bool ) { sal_Int32 nStmPos = rStm.Tell(); - sal_uInt8 nFirst, nSecond; + sal_uInt8 nFirst = 0, nSecond = 0; rStm >> nFirst >> nSecond; @@ -992,15 +1001,16 @@ sal_Bool GraphicDescriptor::ImpDetectSGV( SvStream&, sal_Bool ) sal_Bool GraphicDescriptor::ImpDetectSVM( SvStream& rStm, sal_Bool bExtendedInfo ) { - sal_uInt32 n32; + sal_uInt32 n32 = 0; sal_Bool bRet = sal_False; - sal_uInt8 cByte; + sal_uInt8 cByte = 0; sal_Int32 nStmPos = rStm.Tell(); rStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); rStm >> n32; if ( n32 == 0x44475653 ) { + cByte = 0; rStm >> cByte; if ( cByte == 0x49 ) { @@ -1015,14 +1025,17 @@ sal_Bool GraphicDescriptor::ImpDetectSVM( SvStream& rStm, sal_Bool bExtendedInfo rStm.SeekRel( 0x04 ); // width + nTemp32 = 0; rStm >> nTemp32; aLogSize.Width() = nTemp32; // height + nTemp32 = 0; rStm >> nTemp32; aLogSize.Height() = nTemp32; // read MapUnit and determine PrefSize + nTemp16 = 0; rStm >> nTemp16; aLogSize = OutputDevice::LogicToLogic( aLogSize, MapMode( (MapUnit) nTemp16 ), @@ -1033,11 +1046,12 @@ sal_Bool GraphicDescriptor::ImpDetectSVM( SvStream& rStm, sal_Bool bExtendedInfo else { rStm.SeekRel( -4L ); + n32 = 0; rStm >> n32; if( n32 == 0x4D4C4356 ) { - sal_uInt16 nTmp16; + sal_uInt16 nTmp16 = 0; rStm >> nTmp16; |