tdf#137208 Assume that dladdr provides an absolute pathname

3dfb38a45d6495d357c3359b5b02cde871df6f67 "added getUrlFromAddress (#88338#)" had
introduced the call to osl_getAbsoluteFileURL for no documented reason, but it
looks unlikely that any relevant implementation of dladdr (as called by
getModulePathFromAddress; and where dladdr is a non-POSIX extension on the
various platforms) would provide pathnames that are relative to the process's
CWD.

(Instead, add a check whether osl_getFileURLFromSystemPath succeeds.)

Change-Id: If291e9fdf63fc3f42ba7c7e3138d7db5328ed165
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111004
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
diff --git a/sal/osl/unx/module.cxx b/sal/osl/unx/module.cxx
index 7669c04..72653a9 100644
--- a/sal/osl/unx/module.cxx
+++ b/sal/osl/unx/module.cxx
@@ -298,27 +298,27 @@ sal_Bool SAL_CALL osl_getModuleURLFromAddress(void * addr, rtl_uString ** ppLibr
    rtl_String * path = nullptr;
    if (getModulePathFromAddress(addr, &path))
    {
        rtl_uString * workDir = nullptr;
        osl_getProcessWorkingDir(&workDir);
        if (workDir)
        {
            rtl_string2UString(ppLibraryUrl,
                               path->buffer,
                               path->length,
                               osl_getThreadTextEncoding(),
                               OSTRING_TO_OUSTRING_CVTFLAGS);
        rtl_string2UString(ppLibraryUrl,
                           path->buffer,
                           path->length,
                           osl_getThreadTextEncoding(),
                           OSTRING_TO_OUSTRING_CVTFLAGS);

            SAL_WARN_IF(
                *ppLibraryUrl == nullptr, "sal.osl", "rtl_string2UString failed");
            osl_getFileURLFromSystemPath(*ppLibraryUrl, ppLibraryUrl);
            osl_getAbsoluteFileURL(workDir, *ppLibraryUrl, ppLibraryUrl);
        SAL_WARN_IF(
            *ppLibraryUrl == nullptr, "sal.osl", "rtl_string2UString failed");
        auto const e = osl_getFileURLFromSystemPath(*ppLibraryUrl, ppLibraryUrl);
        if (e == osl_File_E_None)
        {
            SAL_INFO("sal.osl", "osl_getModuleURLFromAddress(" << addr << ") => " << OUString(*ppLibraryUrl));

            rtl_uString_release(workDir);
            result = true;
        }
        else
        {
            SAL_WARN(
                "sal.osl",
                "osl_getModuleURLFromAddress(" << addr << "), osl_getFileURLFromSystemPath("
                    << OUString::unacquired(ppLibraryUrl) << ") failed with " << e);
            result = false;
        }
        rtl_string_release(path);