[PATCH v2 0/3] MR10003: advapi32/tests: Add a test for creating service with empty display name.
-- v2: advapi32/tests: Retry on failure instead of using unconditional Sleep(). services: Treat empty service display name same way as NULL. advapi32/tests: Add a test for creating service with empty display name. https://gitlab.winehq.org/wine/wine/-/merge_requests/10003
From: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> --- dlls/advapi32/tests/service.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index 6a1c0ff82b8..cef600d59da 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -712,6 +712,29 @@ static void test_get_displayname(void) ret = DeleteService(svc_handle); ok(ret, "Expected success (err=%ld)\n", GetLastError()); + CloseServiceHandle(svc_handle); + + /* Test empty DisplayName */ + do + { + SetLastError(0xdeadbeef); + svc_handle = CreateServiceA(scm_handle, servicename, "", DELETE, + SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, + SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); + } while (!svc_handle && GetLastError() == ERROR_SERVICE_MARKED_FOR_DELETE); + ok(svc_handle != NULL, "CreateService() error %lu\n", GetLastError()); + + strcpy(displayname, "deadbeef"); + displaysize = sizeof(displayname); + SetLastError(0xdeadbeef); + ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize); + ok(ret, "GetServiceDisplayName() error %lu\n", GetLastError()); + todo_wine + ok(!lstrcmpiA(displayname, servicename), "got \"%s\"\n", displayname); + + ret = DeleteService(svc_handle); + ok(ret, "DeleteService() error %lu\n", GetLastError()); + CloseServiceHandle(svc_handle); CloseServiceHandle(scm_handle); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10003
From: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> --- dlls/advapi32/tests/service.c | 1 - programs/services/rpc.c | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index cef600d59da..04337aecd52 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -729,7 +729,6 @@ static void test_get_displayname(void) SetLastError(0xdeadbeef); ret = GetServiceDisplayNameA(scm_handle, servicename, displayname, &displaysize); ok(ret, "GetServiceDisplayName() error %lu\n", GetLastError()); - todo_wine ok(!lstrcmpiA(displayname, servicename), "got \"%s\"\n", displayname); ret = DeleteService(svc_handle); diff --git a/programs/services/rpc.c b/programs/services/rpc.c index b2f541ea2c0..6fef374402d 100644 --- a/programs/services/rpc.c +++ b/programs/services/rpc.c @@ -589,6 +589,8 @@ static DWORD create_serviceW( return err; } + if (lpDisplayName && !*lpDisplayName) lpDisplayName = NULL; + entry->is_wow64 = is_wow64; entry->config.dwServiceType = entry->status.dwServiceType = dwServiceType; entry->config.dwStartType = dwStartType; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10003
From: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> --- dlls/advapi32/tests/service.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index 04337aecd52..f0882e33aff 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -2879,15 +2879,14 @@ static void test_refcount(void) ret = CloseServiceHandle(svc_handle1); ok(ret, "Expected success (err=%ld)\n", GetLastError()); - /* Wait a while. Doing a CreateService too soon will result again - * in an ERROR_SERVICE_MARKED_FOR_DELETE error. - */ - Sleep(1000); - - /* We succeed now as all handles are closed (tested this also with a long SLeep() */ - svc_handle5 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, - SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, - SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); + /* We succeed now as all handles are closed (tested this also with a long Sleep() */ + do + { + SetLastError(0xdeadbeef); + svc_handle5 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, + SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, + SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL); + } while (!svc_handle5 && GetLastError() == ERROR_SERVICE_MARKED_FOR_DELETE); ok(svc_handle5 != NULL, "Expected success, got error %lu\n", GetLastError()); /* Delete the service */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10003
participants (2)
-
Dmitry Timoshkov -
Dmitry Timoshkov (@dmitry)