You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/01/12 14:39:34 UTC
svn commit: r1230531 -
/incubator/ooo/trunk/main/svtools/source/filter/filter.cxx
Author: alg
Date: Thu Jan 12 13:39:34 2012
New Revision: 1230531
URL: http://svn.apache.org/viewvc?rev=1230531&view=rev
Log:
#118728# Extended Svg file detection
Modified:
incubator/ooo/trunk/main/svtools/source/filter/filter.cxx
Modified: incubator/ooo/trunk/main/svtools/source/filter/filter.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/source/filter/filter.cxx?rev=1230531&r1=1230530&r2=1230531&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svtools/source/filter/filter.cxx (original)
+++ incubator/ooo/trunk/main/svtools/source/filter/filter.cxx Thu Jan 12 13:39:34 2012
@@ -678,14 +678,51 @@ static sal_Bool ImpPeekGraphicFormat( Sv
//--------------------------- SVG ------------------------------------
if( !bTest )
{
+ // check for Xml
if( ImplSearchEntry( sFirstBytes, (sal_uInt8*)"<?xml", 256, 5 ) // is it xml
- && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"version", 256, 7 ) // does it have a version (required for xml)
- && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"www.w3.org", 256, 10 ) // does it have to do with w3 (part of namespace definition)
- && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"<svg", 256, 4 ) ) // does it have svg nodes
- {
- rFormatExtension = UniString::CreateFromAscii( "SVG", 3 );
- return sal_True;
- }
+ && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"version", 256, 7 )) // does it have a version (required for xml)
+ {
+ bool bIsSvg(false);
+
+ // check for DOCTYPE svg combination
+ if( ImplSearchEntry( sFirstBytes, (sal_uInt8*)"DOCTYPE", 256, 7 ) // 'DOCTYPE' is there
+ && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"svg", 256, 3 )) // 'svg' is there
+ {
+ bIsSvg = true;
+ }
+
+ // check for svg element in 1st 256 bytes
+ if(!bIsSvg && ImplSearchEntry( sFirstBytes, (sal_uInt8*)"<svg", 256, 4 )) // '<svg'
+ {
+ bIsSvg = true;
+ }
+
+ if(!bIsSvg)
+ {
+ // it's a xml, look for '<svg' in full file. Should not happen too
+ // often since the tests above will handle most cases, but can happen
+ // with Svg files containing big comment headers or Svg as the host
+ // language
+ const sal_uLong nSize((nStreamLen > 2048) ? 2048 : nStreamLen);
+ sal_uInt8* pBuf = new sal_uInt8[nSize];
+
+ rStream.Seek(nStreamPos);
+ rStream.Read(pBuf, nSize);
+
+ if(ImplSearchEntry(pBuf, (sal_uInt8*)"<svg", nSize, 4)) // '<svg'
+ {
+ bIsSvg = true;
+ }
+
+ delete[] pBuf;
+ }
+
+ if(bIsSvg)
+ {
+ rFormatExtension = UniString::CreateFromAscii( "SVG", 3 );
+ return sal_True;
+ }
+ }
}
else if( rFormatExtension.CompareToAscii( "SVG", 3 ) == COMPARE_EQUAL )
{