summaryrefslogtreecommitdiff
path: root/extensions/source/plugin/aqua/macmgr.cxx
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2009-09-08 10:44:42 +0000
committerOliver Bolte <obo@openoffice.org>2009-09-08 10:44:42 +0000
commit94f49df4a163f2516b3302e156588da4685c1be6 (patch)
tree7963767d640b6168e06cf0426375a30e0fc1ee9d /extensions/source/plugin/aqua/macmgr.cxx
parent98ae365df0a0c32d75649053dea7dfaace68159a (diff)
CWS-TOOLING: integrate CWS vcl104
Diffstat (limited to 'extensions/source/plugin/aqua/macmgr.cxx')
-rw-r--r--extensions/source/plugin/aqua/macmgr.cxx39
1 files changed, 38 insertions, 1 deletions
diff --git a/extensions/source/plugin/aqua/macmgr.cxx b/extensions/source/plugin/aqua/macmgr.cxx
index 26df705a1d97..29cc793b5856 100644
--- a/extensions/source/plugin/aqua/macmgr.cxx
+++ b/extensions/source/plugin/aqua/macmgr.cxx
@@ -400,12 +400,48 @@ static int parseMimeResource( CFBundleRef i_xBundle,
return nAdded;
}
+// check some known bad plugins to avoid crashes
+static bool checkBlackList( CFBundleRef i_xBundle )
+{
+ rtl::OUString aBundleName;
+ CFTypeRef bundlename = CFBundleGetValueForInfoDictionaryKey( i_xBundle, CFSTR("CFBundleName"));
+ if( bundlename && CFGetTypeID(bundlename) == CFStringGetTypeID() )
+ aBundleName = getString( static_cast<CFStringRef>(bundlename) );
+
+ rtl::OUString aBundleVersion;
+ CFTypeRef bundleversion = CFBundleGetValueForInfoDictionaryKey( i_xBundle, CFSTR("CFBundleVersion"));
+ if( bundleversion && CFGetTypeID(bundleversion) == CFStringGetTypeID() )
+ aBundleVersion = getString( static_cast<CFStringRef>(bundleversion) );
+
+ // #i102735# VLC plugin prior to 1.0 tends to crash
+ if( aBundleName.equalsAscii( "VLC Plug-in" ) )
+ {
+ sal_Int32 nIndex = 0;
+ rtl::OUString aMajor( aBundleVersion.getToken( 0, '.', nIndex ) );
+ if( aMajor.toInt32() < 1 )
+ {
+ #if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr, "rejecting VCL plugin (%s %s)\n",
+ rtl::OUStringToOString( aBundleName, RTL_TEXTENCODING_UTF8 ).getStr(),
+ rtl::OUStringToOString( aBundleVersion, RTL_TEXTENCODING_UTF8 ).getStr()
+ );
+ #endif
+ return true;
+ }
+ }
+
+ return false;
+}
+
static int getPluginDescriptions( CFBundleRef i_xBundle , list< PluginDescription* >& io_rDescriptions )
{
int nDescriptions = 0;
if( ! i_xBundle )
return nDescriptions;
+ if( checkBlackList( i_xBundle ) )
+ return 0;
+
rtl::OUString aPlugURL;
CFURLRef xURL = CFBundleCopyBundleURL( i_xBundle );
aPlugURL = getString( xURL );
@@ -424,7 +460,8 @@ static int getPluginDescriptions( CFBundleRef i_xBundle , list< PluginDescriptio
fprintf( stderr, "URL: %s\nname: %s\ndescription: %s\n",
rtl::OUStringToOString( aPlugURL, RTL_TEXTENCODING_UTF8 ).getStr(),
rtl::OUStringToOString( aPlugName, RTL_TEXTENCODING_UTF8 ).getStr(),
- rtl::OUStringToOString( aPlugDescription, RTL_TEXTENCODING_UTF8 ).getStr() );
+ rtl::OUStringToOString( aPlugDescription, RTL_TEXTENCODING_UTF8 ).getStr()
+ );
#endif