[PATCH 2/4] dbghelp/tests: Add tests for SymSetSearchPath.
Thomas Faber
thomas.faber at reactos.org
Sun Nov 14 07:38:48 CST 2021
Tests with NULL search path would previously crash on Wine, so the test
comes after the initial fix.
-------------- next part --------------
From bf723b79d3637c542c658741c7d58f851dc70451 Mon Sep 17 00:00:00 2001
From: Thomas Faber <thomas.faber at reactos.org>
Date: Sat, 3 Oct 2020 17:18:57 +0200
Subject: dbghelp/tests: Add tests for SymSetSearchPath.
Signed-off-by: Thomas Faber <thomas.faber at reactos.org>
---
dlls/dbghelp/tests/dbghelp.c | 73 +++++++++++++++++++++++++++++++++++-
1 file changed, 72 insertions(+), 1 deletion(-)
diff --git a/dlls/dbghelp/tests/dbghelp.c b/dlls/dbghelp/tests/dbghelp.c
index a243d047d18..06c21ec288c 100644
--- a/dlls/dbghelp/tests/dbghelp.c
+++ b/dlls/dbghelp/tests/dbghelp.c
@@ -132,12 +132,83 @@ static void test_stack_walk(void)
#endif /* __i386__ || __x86_64__ */
+static void test_search_path(void)
+{
+ char search_path[128];
+ BOOL ret;
+
+ /* The default symbol path is ".[;%_NT_SYMBOL_PATH%][;%_NT_ALT_SYMBOL_PATH%]".
+ * We unset both variables earlier so should simply get "." */
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, "."), "Got search path '%s', expected '.'\n", search_path);
+
+ /* Set an arbitrary search path */
+ ret = SymSetSearchPath(GetCurrentProcess(), "W:\\");
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ok(!strcmp(search_path, "W:\\"), "Got search path '%s', expected 'W:\\'\n", search_path);
+
+ /* Setting to NULL resets to the default */
+ ret = SymSetSearchPath(GetCurrentProcess(), NULL);
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, "."), "Got search path '%s', expected '.'\n", search_path);
+
+ /* With _NT_SYMBOL_PATH */
+ SetEnvironmentVariableA("_NT_SYMBOL_PATH", "X:\\");
+ ret = SymSetSearchPath(GetCurrentProcess(), NULL);
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, ".;X:\\"), "Got search path '%s', expected '.;X:\\'\n", search_path);
+
+ /* With both _NT_SYMBOL_PATH and _NT_ALT_SYMBOL_PATH */
+ SetEnvironmentVariableA("_NT_ALT_SYMBOL_PATH", "Y:\\");
+ ret = SymSetSearchPath(GetCurrentProcess(), NULL);
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, ".;X:\\;Y:\\"), "Got search path '%s', expected '.;X:\\;Y:\\'\n", search_path);
+
+ /* With just _NT_ALT_SYMBOL_PATH */
+ SetEnvironmentVariableA("_NT_SYMBOL_PATH", NULL);
+ ret = SymSetSearchPath(GetCurrentProcess(), NULL);
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, ".;Y:\\"), "Got search path '%s', expected '.;Y:\\'\n", search_path);
+
+ /* Restore original search path */
+ SetEnvironmentVariableA("_NT_ALT_SYMBOL_PATH", NULL);
+ ret = SymSetSearchPath(GetCurrentProcess(), NULL);
+ ok(ret == TRUE, "ret = %d\n", ret);
+ ret = SymGetSearchPath(GetCurrentProcess(), search_path, ARRAY_SIZE(search_path));
+ ok(ret == TRUE, "ret = %d\n", ret);
+ todo_wine
+ ok(!strcmp(search_path, "."), "Got search path '%s', expected '.'\n", search_path);
+}
+
START_TEST(dbghelp)
{
- BOOL ret = SymInitialize(GetCurrentProcess(), NULL, TRUE);
+ BOOL ret;
+
+ /* Don't let the user's environment influence our symbol path */
+ SetEnvironmentVariableA("_NT_SYMBOL_PATH", NULL);
+ SetEnvironmentVariableA("_NT_ALT_SYMBOL_PATH", NULL);
+
+ ret = SymInitialize(GetCurrentProcess(), NULL, TRUE);
ok(ret, "got error %u\n", GetLastError());
test_stack_walk();
+ test_search_path();
ret = SymCleanup(GetCurrentProcess());
ok(ret, "got error %u\n", GetLastError());
--
2.31.1
More information about the wine-devel
mailing list