[PATCH] advapi32/tests: Avoid failure when GetServiceKeyName() gets a smart quote.

Francois Gouget fgouget at free.fr
Mon Jan 27 07:22:51 CST 2020


For non-English languages the Spooler display name may contain non-ASCII
characters, typically a smart quote. On Windows 7 GetServiceKeyName()
fails when it gets such characters.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 dlls/advapi32/tests/service.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c
index 38726660850..484167656f1 100644
--- a/dlls/advapi32/tests/service.c
+++ b/dlls/advapi32/tests/service.c
@@ -720,6 +720,17 @@ static void test_get_displayname(void)
     CloseServiceHandle(scm_handle);
 }
 
+static int is_printable_ascii_str(const char *s)
+{
+    while (*s)
+    {
+        if (*s < 32 || *s >= 127)
+            return 0;
+        s++;
+    }
+    return 1;
+}
+
 static void test_get_servicekeyname(void)
 {
     SC_HANDLE scm_handle, svc_handle;
@@ -861,6 +872,14 @@ static void test_get_servicekeyname(void)
     servicesize = 0;
     ret = GetServiceKeyNameA(scm_handle, displayname, NULL, &servicesize);
     ok(!ret, "Expected failure\n");
+    if (!is_printable_ascii_str(displayname) &&
+        GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
+    {
+        win_skip("GetServiceKeyName() does not support non-ASCII display names: %s\n", displayname); /* Windows 7 */
+        CloseServiceHandle(scm_handle);
+        return; /* All the tests that follow will fail too */
+    }
+
     ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
        "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
 
-- 
2.20.1



More information about the wine-devel mailing list