From 7612ff5930c7de8c2279f2b6613c8dbaeea9894e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 23 Oct 2020 08:51:44 +0200 Subject: [PATCH] mscoree/tests: Test invalid assembly paths in registry. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Bernon Signed-off-by: Esme Povirk Signed-off-by: Alexandre Julliard --- dlls/mscoree/tests/Makefile.in | 2 +- dlls/mscoree/tests/comtest.c | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/dlls/mscoree/tests/Makefile.in b/dlls/mscoree/tests/Makefile.in index f65e1bc6c25..7dcd5b64113 100644 --- a/dlls/mscoree/tests/Makefile.in +++ b/dlls/mscoree/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = mscoree.dll -IMPORTS = ole32 shlwapi uuid shell32 +IMPORTS = ole32 shlwapi uuid shell32 advapi32 C_SRCS = \ comtest.c \ diff --git a/dlls/mscoree/tests/comtest.c b/dlls/mscoree/tests/comtest.c index 12b112417d5..8c2ae955cef 100644 --- a/dlls/mscoree/tests/comtest.c +++ b/dlls/mscoree/tests/comtest.c @@ -148,6 +148,51 @@ static void run_test(BOOL expect_success) } IClassFactory_Release(classFactory); } + +} + +static void run_registry_test(run_type run) +{ + char buffer[256]; + ITest *test = NULL; + HRESULT hr, result_expected; + HKEY hkey; + DWORD ret; + int i = 0; + + if (run == run_type_exe_directory) result_expected = S_OK; + else result_expected = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + + sprintf(buffer, "CLSID\\%s", wine_dbgstr_guid(&CLSID_Test), ""); + ret = RegCreateKeyA( HKEY_CLASSES_ROOT, buffer, &hkey ); + ok(ret == ERROR_SUCCESS, "RegCreateKeyA returned %x\n", ret); + + ret = RegSetKeyValueA(hkey, "InprocServer32", NULL, REG_SZ, "mscoree.dll", 11); + ok(ret == ERROR_SUCCESS, "RegSetKeyValueA returned %x\n", ret); + ret = RegSetKeyValueA(hkey, "InprocServer32", "Assembly", REG_SZ, "comtest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", 74); + ok(ret == ERROR_SUCCESS, "RegSetKeyValueA returned %x\n", ret); + ret = RegSetKeyValueA(hkey, "InprocServer32", "Class", REG_SZ, "DLL.Test", 8); + ok(ret == ERROR_SUCCESS, "RegSetKeyValueA returned %x\n", ret); + ret = RegSetKeyValueA(hkey, "InprocServer32", "CodeBase", REG_SZ, "file:///U:/invalid/path/to/comtest.dll", 41); + ok(ret == ERROR_SUCCESS, "RegSetKeyValueA returned %x\n", ret); + + hr = CoCreateInstance(&CLSID_Test, NULL, CLSCTX_INPROC_SERVER, &IID_ITest, (void**)&test); + todo_wine ok(hr == result_expected, "Expected %x, got %x\n", result_expected, hr); + + if (hr == S_OK) + { + hr = ITest_Func(test, &i); + ok(hr == S_OK, "Got %x\n", hr); + ok(i == 42, "Expected 42, got %d\n", i); + ITest_Release(test); + } + + RegDeleteKeyValueA(hkey, "InprocServer32", "CodeBase"); + RegDeleteKeyValueA(hkey, "InprocServer32", "Class"); + RegDeleteKeyValueA(hkey, "InprocServer32", "Assembly"); + RegDeleteKeyValueA(hkey, "InprocServer32", NULL); + RegDeleteKeyA(hkey, "InprocServer32"); + RegCloseKey(hkey); } static void get_dll_path_for_run(char *path_dll, UINT path_dll_size, run_type run) @@ -247,6 +292,7 @@ static void prepare_and_run_test(const char *dll_source, run_type run) SetCurrentDirectoryA(path_tmp); run_test(run == run_type_exe_directory); + run_registry_test(run); cleanup: if (handle_context != NULL && handle_context != INVALID_HANDLE_VALUE)