Fix (unreported): 'CoInitializeEx' being called without 'CoUninitialize'

Problem introduced in {rB1f223b9a}.

This was possibly causing random crashes in Blender file browser when
compiled with ASAN.

Microsoft documents indicate that any call to `CoInitializeEx` must be
balanced by a corresponding call to `CoUninitialize`.

https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coinitializeex#remarks
This commit is contained in:
Germano Cavalcante 2021-05-03 19:32:05 -03:00
parent 874c70d088
commit b874c152a8
1 changed files with 9 additions and 4 deletions

View File

@ -299,12 +299,16 @@ bool BLI_file_alias_target(const char *filepath,
return false;
}
IShellLinkW *Shortcut = NULL;
bool success = false;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (FAILED(hr)) {
return false;
}
HRESULT hr = CoCreateInstance(
IShellLinkW *Shortcut = NULL;
hr = CoCreateInstance(
&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkW, (LPVOID *)&Shortcut);
bool success = false;
if (SUCCEEDED(hr)) {
IPersistFile *PersistFile;
hr = Shortcut->lpVtbl->QueryInterface(Shortcut, &IID_IPersistFile, (LPVOID *)&PersistFile);
@ -328,6 +332,7 @@ bool BLI_file_alias_target(const char *filepath,
Shortcut->lpVtbl->Release(Shortcut);
}
CoUninitialize();
return (success && r_targetpath[0]);
# else
UNUSED_VARS(r_targetpath, filepath);