vcl/source/filter/FilterConfigCache.cxx | 16 ++++++++++++++++ vcl/source/filter/FilterConfigCache.hxx | 1 + vcl/source/filter/graphicfilter.cxx | 24 ++++++------------------ vcl/source/gdi/pngread.cxx | 13 +++++-------- 4 files changed, 28 insertions(+), 26 deletions(-)
New commits: commit c123ea35635943bebf87b7515ecf9c9e5b330ffe Author: Michael Meeks <michael.me...@suse.com> Date: Tue Mar 5 11:48:56 2013 +0000 make vcl filter config extension search cleaner and more comprehensive Change-Id: I7a5740b42490bf2301e6466f056fdb1dae4c6dbb diff --git a/vcl/source/filter/FilterConfigCache.cxx b/vcl/source/filter/FilterConfigCache.cxx index 53d0ef8..c3873c3 100644 --- a/vcl/source/filter/FilterConfigCache.cxx +++ b/vcl/source/filter/FilterConfigCache.cxx @@ -333,6 +333,22 @@ sal_uInt16 FilterConfigCache::GetImportFormatNumber( const String& rFormatName ) return sal::static_int_cast< sal_uInt16 >(aIter == aImport.end() ? GRFILTER_FORMAT_NOTFOUND : aIter - aImport.begin()); } +/// get the index of the filter that matches this extension +sal_uInt16 FilterConfigCache::GetImportFormatNumberForExtension( const String& rExt ) +{ + CacheVector::iterator aIter( aImport.begin() ); + while ( aIter != aImport.end() ) + { + for ( sal_Int32 i = 0; i < aIter->lExtensionList.getLength(); i++ ) + { + if ( aIter->lExtensionList[i].equalsIgnoreAsciiCase( rExt ) ) + return sal::static_int_cast< sal_uInt16 >( aIter - aImport.begin() ); + } + aIter++; + } + return GRFILTER_FORMAT_NOTFOUND; +} + sal_uInt16 FilterConfigCache::GetImportFormatNumberForMediaType( const String& rMediaType ) { CacheVector::iterator aIter( aImport.begin() ); diff --git a/vcl/source/filter/FilterConfigCache.hxx b/vcl/source/filter/FilterConfigCache.hxx index df1cc10..5a5557a 100644 --- a/vcl/source/filter/FilterConfigCache.hxx +++ b/vcl/source/filter/FilterConfigCache.hxx @@ -89,6 +89,7 @@ public: sal_uInt16 GetImportFormatNumberForMediaType( const String& rMediaType ); sal_uInt16 GetImportFormatNumberForShortName( const String& rShortName ); sal_uInt16 GetImportFormatNumberForTypeName( const String& rType ); + sal_uInt16 GetImportFormatNumberForExtension( const String& rExt ); String GetImportFilterName( sal_uInt16 nFormat ); String GetImportFormatName( sal_uInt16 nFormat ); String GetImportFormatExtension( sal_uInt16 nFormat, sal_Int32 nEntry = 0); diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index cd62da4..d1835d0 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -787,8 +787,6 @@ static sal_Bool ImpPeekGraphicFormat( SvStream& rStream, String& rFormatExtensio sal_uInt16 GraphicFilter::ImpTestOrFindFormat( const String& rPath, SvStream& rStream, sal_uInt16& rFormat ) { - sal_uInt16 n = pConfig->GetImportFormatCount(); - // ggf. Filter bzw. Format durch anlesen ermitteln, // oder durch anlesen zusichern, dass das Format stimmt: if( rFormat == GRFILTER_FORMAT_DONTKNOW ) @@ -796,27 +794,17 @@ sal_uInt16 GraphicFilter::ImpTestOrFindFormat( const String& rPath, SvStream& rS String aFormatExt; if( ImpPeekGraphicFormat( rStream, aFormatExt, sal_False ) ) { - for( sal_uInt16 i = 0; i < n; i++ ) - { - if( pConfig->GetImportFormatExtension( i ).EqualsIgnoreCaseAscii( aFormatExt ) ) - { - rFormat = i; - return GRFILTER_OK; - } - } + rFormat = pConfig->GetImportFormatNumberForExtension( aFormatExt ); + if( rFormat != GRFILTER_FORMAT_DONTKNOW ) + return GRFILTER_OK; } // ggf. Filter anhand der Datei-Endung raussuchen: if( rPath.Len() ) { String aExt( ImpGetExtension( rPath ) ); - for( sal_uInt16 i = 0; i < n; i++ ) - { - if( pConfig->GetImportFormatExtension( i ).EqualsIgnoreCaseAscii( aExt ) ) - { - rFormat = i; - return GRFILTER_OK; - } - } + rFormat = pConfig->GetImportFormatNumberForExtension( aExt ); + if( rFormat != GRFILTER_FORMAT_DONTKNOW ) + return GRFILTER_OK; } return GRFILTER_FORMATERROR; } commit 0b789377ffc1a05b6c6a58e373900e378835e07e Author: Michael Meeks <michael.me...@suse.com> Date: Tue Mar 5 11:48:32 2013 +0000 fdo#61847 - tolerate invalid pngs. Change-Id: I02a6460e9fa50c1c11e4f4c972bf962064d57410 diff --git a/vcl/source/gdi/pngread.cxx b/vcl/source/gdi/pngread.cxx index 17cc412..bafafd5 100644 --- a/vcl/source/gdi/pngread.cxx +++ b/vcl/source/gdi/pngread.cxx @@ -259,12 +259,10 @@ bool PNGReaderImpl::ReadNextChunk() mrPNGStream >> mnChunkLen >> mnChunkType; rChunkData.nType = mnChunkType; - // #128377#/#149343# sanity check for chunk length - if( mnChunkLen < 0 ) - return false; + // fdo#61847 truncate over-long, trailing chunks const sal_Size nStreamPos = mrPNGStream.Tell(); - if( nStreamPos + mnChunkLen >= mnStreamSize ) - return false; + if( mnChunkLen < 0 || nStreamPos + mnChunkLen >= mnStreamSize ) + mnChunkLen = mnStreamSize - nStreamPos; // calculate chunktype CRC (swap it back to original byte order) sal_uInt32 nChunkType = mnChunkType; @@ -339,7 +337,8 @@ BitmapEx PNGReaderImpl::GetBitmapEx( const Size& rPreviewSizeHint ) } // parse the remaining chunks - while( mbStatus && !mbIDAT && ReadNextChunk() ) + bool bRetFromNextChunk; + while( mbStatus && !mbIDAT && (bRetFromNextChunk = ReadNextChunk()) ) { switch( mnChunkType ) { @@ -445,9 +444,7 @@ BitmapEx PNGReaderImpl::GetBitmapEx( const Size& rPreviewSizeHint ) aRet.SetPrefMapMode( MAP_100TH_MM ); aRet.SetPrefSize( maPhysSize ); } - } - return aRet; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits