View | Details | Raw Unified | Return to issue 124555
Collapse All | Expand All

(-)a/main/vcl/source/gdi/dibtools.cxx (-29 / +30 lines)
Lines 775-820 bool ImplReadDIBBody( SvStream& rIStm, Bitmap& rBmp, Bitmap* pBmpAlpha, sal_uLon Link Here
775
775
776
bool ImplReadDIBFileHeader( SvStream& rIStm, sal_uLong& rOffset )
776
bool ImplReadDIBFileHeader( SvStream& rIStm, sal_uLong& rOffset )
777
{
777
{
778
	sal_uInt32	nTmp32;
778
    bool bRet = false;
779
	sal_uInt16	nTmp16 = 0;
780
	bool	bRet = false;
781
779
782
    const sal_Int64 nStreamLength (rIStm.Seek(STREAM_SEEK_TO_END));
780
    const sal_Int64 nSavedStreamPos( rIStm.Tell() );
783
    rIStm.Seek(STREAM_SEEK_TO_BEGIN);
781
    const sal_Int64 nStreamLength( rIStm.Seek( STREAM_SEEK_TO_END ) );
782
    rIStm.Seek( nSavedStreamPos );
784
783
785
	rIStm >> nTmp16;
784
    sal_uInt16 nTmp16 = 0;
785
    rIStm >> nTmp16;
786
786
787
	if ( ( 0x4D42 == nTmp16 ) || ( 0x4142 == nTmp16 ) )
787
    if ( ( 0x4D42 == nTmp16 ) || ( 0x4142 == nTmp16 ) )
788
	{
788
    {
789
		if ( 0x4142 == nTmp16 )
789
        sal_uInt32 nTmp32;
790
		{
790
        if ( 0x4142 == nTmp16 )
791
			rIStm.SeekRel( 12L );
791
        {
792
			rIStm >> nTmp16;
792
            rIStm.SeekRel( 12L );
793
			rIStm.SeekRel( 8L );
793
            rIStm >> nTmp16;
794
			rIStm >> nTmp32;
794
            rIStm.SeekRel( 8L );
795
			rOffset = nTmp32 - 28UL;
795
            rIStm >> nTmp32;
796
			bRet = ( 0x4D42 == nTmp16 );
796
            rOffset = nTmp32 - 28UL;
797
		}
797
            bRet = ( 0x4D42 == nTmp16 );
798
		else // 0x4D42 == nTmp16, 'MB' from BITMAPFILEHEADER
798
        }
799
		{
799
        else // 0x4D42 == nTmp16, 'MB' from BITMAPFILEHEADER
800
			rIStm.SeekRel( 8L );        // we are on bfSize member of BITMAPFILEHEADER, forward to bfOffBits
800
        {
801
			rIStm >> nTmp32;            // read bfOffBits
801
            rIStm.SeekRel( 8L );        // we are on bfSize member of BITMAPFILEHEADER, forward to bfOffBits
802
			rOffset = nTmp32 - 14UL;    // adapt offset by sizeof(BITMAPFILEHEADER)
802
            rIStm >> nTmp32;            // read bfOffBits
803
			bRet = ( rIStm.GetError() == 0UL );
803
            rOffset = nTmp32 - 14UL;    // adapt offset by sizeof(BITMAPFILEHEADER)
804
		}
804
            bRet = ( rIStm.GetError() == 0UL );
805
        }
805
806
806
        if (rOffset >= nStreamLength)
807
        if ( rOffset >= nStreamLength )
807
        {
808
        {
808
            // Offset claims that image starts past the end of the
809
            // Offset claims that image starts past the end of the
809
            // stream.  Unlikely.
810
            // stream.  Unlikely.
810
            rIStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
811
            rIStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
811
            bRet = false;
812
            bRet = false;
812
        }
813
        }
813
	}
814
    }
814
	else
815
    else
815
		rIStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
816
        rIStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
816
817
817
	return bRet;
818
    return bRet;
818
}
819
}
819
820
820
bool ImplWriteDIBPalette( SvStream& rOStm, BitmapReadAccess& rAcc )
821
bool ImplWriteDIBPalette( SvStream& rOStm, BitmapReadAccess& rAcc )

Return to issue 124555