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>
(cherry picked from commit fa1b6aa517966991ce1a1d0135bd5dfae331ab9a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163176
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx
index f19bd70..eba4fe0 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 )