[PATCH v2] shell32/tests: Avoid random values in the shlexec failure messages.

Francois Gouget fgouget at codeweavers.com
Sun Mar 15 16:29:02 CDT 2020


Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---

v2: This should catch all troublesome failure messages.

 dlls/shell32/tests/shlexec.c | 55 ++++++++++++++++++++++++++++++------
 1 file changed, 46 insertions(+), 9 deletions(-)

diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c
index 030ab54525a..1e7fd2140b1 100644
--- a/dlls/shell32/tests/shlexec.c
+++ b/dlls/shell32/tests/shlexec.c
@@ -350,6 +350,43 @@ static void dump_child_(const char* file, int line)
  *
  ***/
 
+static const char* substTmpPath(const char* str, const char *path, char rep)
+{
+    static char buffer[1024];
+    char *p;
+
+    if (!str || strlen(str) >= sizeof(buffer))
+        return str;
+
+    /* Only modify the last component of the path */
+    p = strrchr(path, '\\');
+    if (p) path = p + 1;
+    p = strrchr(path, '/');
+    if (p) path = p + 1;
+
+    p = strstr(str, path);
+    if (!p)
+        return str;
+
+    strcpy(buffer, str);
+    p = buffer + (p - str);
+    while (p)
+    {
+        p += 2; /* skip the 'wt' prefix */
+        /* and only replace the random part of the path */
+        while (*p && *p != '.')
+            *p++ = rep;
+        p = strstr(p, path);
+    }
+    return buffer;
+}
+
+static const char* derandomizeString(const char* str)
+{
+    str = substTmpPath(str, child_file, 'C');
+    return substTmpPath(str, tmpdir, 'D');
+}
+
 static char shell_call[2048];
 static void WINAPIV __WINE_PRINTF_ATTR(2,3) _okShell(int condition, const char *msg, ...)
 {
@@ -507,9 +544,9 @@ static INT_PTR shell_execute_(const char* file, int line, LPCSTR verb, LPCSTR fi
 
     strcpy(shell_call, "ShellExecute(");
     strcat_param(shell_call, "verb", verb);
-    strcat_param(shell_call, "file", filename);
-    strcat_param(shell_call, "params", parameters);
-    strcat_param(shell_call, "dir", directory);
+    strcat_param(shell_call, "file", derandomizeString(filename));
+    strcat_param(shell_call, "params", derandomizeString(parameters));
+    strcat_param(shell_call, "dir", derandomizeString(directory));
     strcat(shell_call, ")");
     strcat(shell_call, assoc_desc);
     if (winetest_debug > 1)
@@ -591,9 +628,9 @@ static INT_PTR shell_execute_ex_(const char* file, int line,
     sprintf(smask, "0x%x", mask);
     strcat_param(shell_call, "mask", smask);
     strcat_param(shell_call, "verb", verb);
-    strcat_param(shell_call, "file", filename);
-    strcat_param(shell_call, "params", parameters);
-    strcat_param(shell_call, "dir", directory);
+    strcat_param(shell_call, "file", derandomizeString(filename));
+    strcat_param(shell_call, "params", derandomizeString(parameters));
+    strcat_param(shell_call, "dir", derandomizeString(directory));
     strcat_param(shell_call, "class", class);
     strcat(shell_call, ")");
     strcat(shell_call, assoc_desc);
@@ -832,7 +869,7 @@ static void create_test_verb_dde(const char* classname, const char* verb,
     sprintf(shell, "%d", rawcmd);
     strcat_param(assoc_desc, "rawcmd", shell);
     strcat_param(assoc_desc, "cmdtail", cmdtail);
-    strcat_param(assoc_desc, "ddeexec", ddeexec);
+    strcat_param(assoc_desc, "ddeexec", derandomizeString(ddeexec));
     strcat_param(assoc_desc, "app", application);
     strcat_param(assoc_desc, "topic", topic);
     strcat_param(assoc_desc, "ifexec", ifexec);
@@ -1737,7 +1774,7 @@ static void test_filename(void)
     okChildInt("argcA", 5);
     todo_wine okChildString("argvA3", "averb");
     sprintf(filename, "%s\\test file.sha", tmpdir);
-    todo_wine okChildPath("argvA4", filename);
+    todo_wine okChildPath("argvA4", derandomizeString(filename));
 }
 
 typedef struct
@@ -2080,7 +2117,7 @@ static void test_find_executable(void)
         if (rc > 32)
             rc=33;
         todo_wine_if(test->todo & 0x10)
-            ok(rc==test->rc, "FindExecutable(%s) failed: rc=%ld\n", filename, rc);
+            ok(rc==test->rc, "FindExecutable(%s) failed: rc=%ld\n", derandomizeString(filename), rc);
         if (rc > 32)
         {
             BOOL equal;
-- 
2.20.1



More information about the wine-devel mailing list