diff options
author | Patrick Luby <guibmacdev@gmail.com> | 2024-02-10 19:11:25 -0500 |
---|---|---|
committer | Patrick Luby <guibomacdev@gmail.com> | 2024-02-11 13:39:10 +0100 |
commit | fa1b6aa517966991ce1a1d0135bd5dfae331ab9a (patch) | |
tree | def0cde05cdcaad653bbfeb80838524f1b00ce07 /sal/osl | |
parent | d248a7131ff495fb817cc4963298363b9e1b2008 (diff) |
tdf#155710 handle conversion failures due to non-UTF8 strings
Windows and Linux paths can be passed as parameters to this function
and those paths may not always be UTF8 encoded like macOS paths.
Change-Id: I83f5ab491d3c0ddd938e512fbab3213af9ea16fd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163223
Tested-by: Jenkins
Reviewed-by: Patrick Luby <guibomacdev@gmail.com>
Diffstat (limited to 'sal/osl')
-rw-r--r-- | sal/osl/unx/system.cxx | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx index f19bd7053100..eba4fe01c6c5 100644 --- a/sal/osl/unx/system.cxx +++ b/sal/osl/unx/system.cxx @@ -48,11 +48,6 @@ int macxp_resolveAlias(char *path, int buflen) (void) buflen; return 0; #else - CFStringRef cfpath; - CFURLRef cfurl; - CFErrorRef cferror; - CFDataRef cfbookmark; - // Don't even try anything for files inside the app bundle. Just a // waste of time. @@ -74,12 +69,19 @@ int macxp_resolveAlias(char *path, int buflen) if ( unprocessedPath ) *unprocessedPath = '\0'; - cfpath = CFStringCreateWithCString( nullptr, path, kCFStringEncodingUTF8 ); - cfurl = CFURLCreateWithFileSystemPath( nullptr, cfpath, kCFURLPOSIXPathStyle, false ); - CFRelease( cfpath ); - cferror = nullptr; - cfbookmark = CFURLCreateBookmarkDataFromFile( nullptr, cfurl, &cferror ); - CFRelease( cfurl ); + // tdf#155710 handle conversion failures due to non-UTF8 strings + // Windows and Linux paths can be passed as parameters to this function + // and those paths may not always be UTF8 encoded like macOS paths. + CFStringRef cfpath = CFStringCreateWithCString( nullptr, path, kCFStringEncodingUTF8 ); + CFErrorRef cferror = nullptr; + CFDataRef cfbookmark = nullptr; + if (cfpath) + { + CFURLRef cfurl = CFURLCreateWithFileSystemPath( nullptr, cfpath, kCFURLPOSIXPathStyle, false ); + CFRelease( cfpath ); + cfbookmark = CFURLCreateBookmarkDataFromFile( nullptr, cfurl, &cferror ); + CFRelease( cfurl ); + } if ( cfbookmark == nullptr ) { @@ -91,7 +93,7 @@ int macxp_resolveAlias(char *path, int buflen) else { Boolean isStale; - cfurl = CFURLCreateByResolvingBookmarkData( nullptr, cfbookmark, kCFBookmarkResolutionWithoutUIMask, + CFURLRef cfurl = CFURLCreateByResolvingBookmarkData( nullptr, cfbookmark, kCFBookmarkResolutionWithoutUIMask, nullptr, nullptr, &isStale, &cferror ); CFRelease( cfbookmark ); if ( cfurl == nullptr ) |