diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-05-04 01:32:05 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-05-04 01:58:13 +0300 |
commit | b874c152a81c6c52a17a7157ce7be57f2ee28cf4 (patch) | |
tree | 98752e1d87a4c606f908d026a83cf179ad0cb1b0 /source/blender/blenlib/intern | |
parent | 874c70d088136f8e1d8c3fc00b6fc69f4e3c2784 (diff) |
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
Diffstat (limited to 'source/blender/blenlib/intern')
-rw-r--r-- | source/blender/blenlib/intern/storage.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 287334a34ee..cb2634e6fda 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -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); |