diff options
author | sb <sb@openoffice.org> | 2009-09-25 15:27:34 +0200 |
---|---|---|
committer | sb <sb@openoffice.org> | 2009-09-25 15:27:34 +0200 |
commit | e993d53e2a4bd6fd3eccdb885bd461d59fcec5b5 (patch) | |
tree | 27fe95bc9c8fb6c68657abebedf795c2e2c82614 /shell/source | |
parent | 42345be352f413b571b83d262cc96025a9e8618d (diff) | |
parent | ab33e14647ada2a32624fa39ec0ddbbbdc694df5 (diff) |
merged in DEV300_m60
Diffstat (limited to 'shell/source')
-rw-r--r-- | shell/source/aqua/sysshell/makefile.mk | 1 | ||||
-rw-r--r-- | shell/source/aqua/sysshell/systemshell.cxx | 36 | ||||
-rw-r--r-- | shell/source/backends/macbe/makefile.mk | 3 |
3 files changed, 35 insertions, 5 deletions
diff --git a/shell/source/aqua/sysshell/makefile.mk b/shell/source/aqua/sysshell/makefile.mk index a748e00c154e..b3cf3abdec36 100644 --- a/shell/source/aqua/sysshell/makefile.mk +++ b/shell/source/aqua/sysshell/makefile.mk @@ -40,7 +40,6 @@ ENABLE_EXCEPTIONS=TRUE .INCLUDE : settings.mk -OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions CFLAGSCXX+=$(OBJCXXFLAGS) # --- Files -------------------------------------------------------- diff --git a/shell/source/aqua/sysshell/systemshell.cxx b/shell/source/aqua/sysshell/systemshell.cxx index a9b4afe1a966..a9535c849f77 100644 --- a/shell/source/aqua/sysshell/systemshell.cxx +++ b/shell/source/aqua/sysshell/systemshell.cxx @@ -71,17 +71,49 @@ static rtl::OUString translateToExternalUrl(const rtl::OUString& internalUrl) return extUrl; } +// #i104525# many versions of OSX have problems with some URLs: +// when an app requests OSX to add one of these URLs to the "Recent Items" list +// then this app gets killed (TextEdit, Preview, etc. and also OOo) +static bool isDangerousUrl( const rtl::OUString& rUrl) +{ + // use a heuristic that detects all known cases since there is no official comment + // on the exact impact and root cause of the OSX bug + const int nLen = rUrl.getLength(); + const sal_Unicode* p = rUrl.getStr(); + for( int i = 0; i < nLen-3; ++i, ++p) { + if( p[0] != '%') + continue; + // escaped percent? + if( (p[1] == '2') && (p[2] == '5')) + return true; + // escapes are considered to be UTF-8 encoded + // => check for invalid UTF-8 leading byte + if( (p[1] != 'f') && (p[1] != 'F')) + continue; + int cLowNibble = p[2]; + if( (cLowNibble >= '0') && (cLowNibble <= '9')) + return false; + if( cLowNibble >= 'a') + cLowNibble -= 'a' - 'A'; + if( (cLowNibble < 'A') || (cLowNibble >= 'C')) + return true; + } + + return false; +} + namespace SystemShell { //############################## - void AddToRecentDocumentList(const rtl::OUString& aFileUrl, const rtl::OUString& aMimeType) + void AddToRecentDocumentList(const rtl::OUString& aFileUrl, const rtl::OUString& /*aMimeType*/) { // Convert file URL for external use (see above) rtl::OUString externalUrl = translateToExternalUrl(aFileUrl); if( 0 == externalUrl.getLength() ) externalUrl = aFileUrl; - if( externalUrl.getLength() ) + if( externalUrl.getLength() + && !isDangerousUrl( externalUrl)) { NSString* pString = [[NSString alloc] initWithCharacters: externalUrl.getStr() length: externalUrl.getLength()]; NSURL* pURL = [NSURL URLWithString: pString]; diff --git a/shell/source/backends/macbe/makefile.mk b/shell/source/backends/macbe/makefile.mk index dd2b166ce1ce..c8f6891d6f87 100644 --- a/shell/source/backends/macbe/makefile.mk +++ b/shell/source/backends/macbe/makefile.mk @@ -50,11 +50,10 @@ DLLPRE = .IF "$(OS)" != "MACOSX" dummy: - @echo "Nothing to build for OS $(OS)." + @echo "Nothing to build for OS $(OS)." .ELSE -OBJCXXFLAGS=-x objective-c++ -fobjc-exceptions CFLAGSCXX+=$(OBJCXXFLAGS) SLOFILES= \ |