diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2021-02-21 18:55:49 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2021-02-21 18:57:27 +0100 |
commit | 0eace45ceae82a98c630d6bbec5b18b896a7f35d (patch) | |
tree | 884395f64e9c2d5162dfde9744c1faefdc327fd7 | |
parent | 13a1b3482c7a19b24499c2458b13c631cf2a2309 (diff) | |
download | VeraCrypt-0eace45ceae82a98c630d6bbec5b18b896a7f35d.tar.gz VeraCrypt-0eace45ceae82a98c630d6bbec5b18b896a7f35d.zip |
Windows: Fix failure to load local HTML documentation if application running with administrative privileges
In this case, FileExists was called on a path with format "file:///..." and containing escape sequences, which was not recognized.
-rw-r--r-- | src/Common/Dlgcode.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index a77109b7..14c57f3e 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -11192,13 +11192,31 @@ void Applink (const char *dest) if (IsAdmin ()) { - if (buildUrl && !FileExists (url)) + int openDone = 0; + if (buildUrl) { - // fallbacl to online resources - StringCbPrintfW (url, sizeof (url), L"https://www.veracrypt.fr/en/%s", page); - SafeOpenURL (url); + wchar_t pageFileName [TC_MAX_PATH] = {0}; + DWORD cchUnescaped = ARRAYSIZE(pageFileName); + + StringCbCopyW (pageFileName, sizeof(pageFileName), page); + /* remove escape sequences from the page name before calling FileExists function */ + if (S_OK == UrlUnescapeW (pageFileName, pageFileName, &cchUnescaped, URL_UNESCAPE_INPLACE)) + { + std::wstring pageFullPath = installDir; + pageFullPath += L"docs\\html\\en\\"; + pageFullPath += pageFileName; + + if (!FileExists (pageFullPath.c_str())) + { + // fallback to online resources + StringCbPrintfW (url, sizeof (url), L"https://www.veracrypt.fr/en/%s", page); + SafeOpenURL (url); + openDone = 1; + } + } } - else + + if (!openDone) { SafeOpenURL (url); } @@ -11209,7 +11227,7 @@ void Applink (const char *dest) if (((r == ERROR_FILE_NOT_FOUND) || (r == ERROR_PATH_NOT_FOUND)) && buildUrl) { - // fallbacl to online resources + // fallback to online resources StringCbPrintfW (url, sizeof (url), L"https://www.veracrypt.fr/en/%s", page); ShellExecuteW (NULL, L"open", url, NULL, NULL, SW_SHOWNORMAL); } |