[PATCH v3] shell32/tests: Avoid ever changing values in the shlexec failure messages.
Zebediah Figura
z.figura12 at gmail.com
Sun Mar 15 19:14:39 CDT 2020
On 3/15/20 7:18 PM, Francois Gouget wrote:
> Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
> ---
>
> v3: The derandomisation must be done in the ok*() functions, not before
> to not break the comparisons. The TestBot now shows the expected
> results: it still has failures but the TestBot will be able to see
> that they are not new.
>
> dlls/shell32/tests/shlexec.c | 60 ++++++++++++++++++++++++++++--------
> 1 file changed, 48 insertions(+), 12 deletions(-)
>
> diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c
> index 030ab54525a..3571b64cc9e 100644
> --- a/dlls/shell32/tests/shlexec.c
> +++ b/dlls/shell32/tests/shlexec.c
> @@ -350,6 +350,42 @@ static void dump_child_(const char* file, int line)
> *
> ***/
>
> +static void substTmpPath(char* str, const char *path, char rep)
> +{
> + char *p;
> +
> + /* 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);
> + while (p)
> + {
> + p += 2; /* skip the 'wt' prefix */
> + /* and only replace the random part of the filename */
> + while (*p && *p != '.')
> + *p++ = rep;
> + p = strstr(p, path);
> + }
> +}
> +
> +static const char* derandomizeString(const char* str)
> +{
> + static char buffer[2][2048];
> + static int current_buffer = 0;
> +
> + if (!str || strlen(str) >= sizeof(buffer[0]))
> + return str;
> +
> + current_buffer = current_buffer ? 0 : 1;
> + strcpy(buffer[current_buffer], str);
> + substTmpPath(buffer[current_buffer], tmpdir, 'D');
> + substTmpPath(buffer[current_buffer], child_file, 'C');
> + return buffer[current_buffer];
> +}
> +
This seems an awful lot of effort to put in just to avoid a variable
string being printed. Is there really anything we get out of having
those strings printed in the first place? Would it be better to just
remove them?
> static char shell_call[2048];
> static void WINAPIV __WINE_PRINTF_ATTR(2,3) _okShell(int condition, const char *msg, ...)
> {
> @@ -378,12 +414,12 @@ static void okChildString_(const char* file, int line, const char* key, const ch
> result=getChildString("Child", key);
> if (!result)
> {
> - okShell_(file, line)(FALSE, "%s expected '%s', but key not found or empty\n", key, expected);
> + okShell_(file, line)(FALSE, "%s expected '%s', but key not found or empty\n", key, derandomizeString(expected));
> return;
> }
> okShell_(file, line)(lstrcmpiA(result, expected) == 0 ||
> broken(lstrcmpiA(result, bad) == 0),
> - "%s expected '%s', got '%s'\n", key, expected, result);
> + "%s expected '%s', got '%s'\n", key, derandomizeString(expected), derandomizeString(result));
> }
> #define okChildString(key, expected) okChildString_(__FILE__, __LINE__, (key), (expected), (expected))
> #define okChildStringBroken(key, expected, broken) okChildString_(__FILE__, __LINE__, (key), (expected), (broken))
> @@ -432,7 +468,7 @@ static void okChildPath_(const char* file, int line, const char* key, const char
> result=getChildString("Child", key);
> if (!result)
> {
> - okShell_(file,line)(FALSE, "%s expected '%s', but key not found or empty\n", key, expected);
> + okShell_(file,line)(FALSE, "%s expected '%s', but key not found or empty\n", key, derandomizeString(expected));
> return;
> }
> shortequal = FALSE;
> @@ -451,7 +487,7 @@ static void okChildPath_(const char* file, int line, const char* key, const char
> }
> }
> okShell_(file,line)(equal || broken(shortequal) /* XP SP1 */,
> - "%s expected '%s', got '%s'\n", key, expected, result);
> + "%s expected '%s', got '%s'\n", key, derandomizeString(expected), derandomizeString(result));
> }
> #define okChildPath(key, expected) okChildPath_(__FILE__, __LINE__, (key), (expected))
>
> @@ -507,9 +543,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 +627,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 +868,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);
> @@ -2080,7 +2116,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;
>
More information about the wine-devel
mailing list