VeraCrypt
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2021-02-21 18:55:49 +0100
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2021-02-21 18:57:27 +0100
commit0eace45ceae82a98c630d6bbec5b18b896a7f35d (patch)
tree884395f64e9c2d5162dfde9744c1faefdc327fd7
parent13a1b3482c7a19b24499c2458b13c631cf2a2309 (diff)
downloadVeraCrypt-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.c30
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);
}