Module: wine Branch: master Commit: 2c576e88b481f579b6fd87ff80da526570318529 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c576e88b481f579b6fd87ff80...
Author: Stefan Leichter Stefan.Leichter@camline.com Date: Sun Sep 27 10:10:41 2009 +0200
kernel32: Check parameter of CheckRemoteDebuggerPresent with tests.
---
dlls/kernel32/debugger.c | 5 +++++ dlls/kernel32/tests/debugger.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/debugger.c b/dlls/kernel32/debugger.c index b83647c..bb0b5fa 100644 --- a/dlls/kernel32/debugger.c +++ b/dlls/kernel32/debugger.c @@ -402,6 +402,11 @@ BOOL WINAPI IsDebuggerPresent(void) */ BOOL WINAPI CheckRemoteDebuggerPresent(HANDLE process, PBOOL DebuggerPresent) { + if(!process || !DebuggerPresent) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } FIXME("(%p)->(%p): Stub!\n", process, DebuggerPresent); *DebuggerPresent = FALSE; return TRUE; diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c index 2f32478..57d68ec 100644 --- a/dlls/kernel32/tests/debugger.c +++ b/dlls/kernel32/tests/debugger.c @@ -32,6 +32,7 @@ static int myARGC; static char** myARGV;
+static BOOL (WINAPI *pCheckRemoteDebuggerPresent)(HANDLE,PBOOL); static BOOL (WINAPI *pDebugActiveProcessStop)(DWORD); static BOOL (WINAPI *pDebugSetProcessKillOnExit)(BOOL);
@@ -431,11 +432,42 @@ static void test_ExitCode(void) } }
+static void test_RemoteDebugger(void) +{ + BOOL bret, present; + if(!pCheckRemoteDebuggerPresent) + { + win_skip("CheckRemoteDebuggerPresent is not available\n"); + return; + } + present = TRUE; + SetLastError(0xdeadbeef); + bret = pCheckRemoteDebuggerPresent(GetCurrentProcess(),&present); + ok(bret , "expected CheckRemoteDebuggerPresent to succeed\n"); + ok(0xdeadbeef == GetLastError(), + "expected error to be unchanged, got %d/%x\n",GetLastError(), GetLastError()); + + present = TRUE; + SetLastError(0xdeadbeef); + bret = pCheckRemoteDebuggerPresent(NULL,&present); + ok(!bret , "expected CheckRemoteDebuggerPresent to fail\n"); + ok(present, "expected parameter to be unchanged\n"); + ok(ERROR_INVALID_PARAMETER == GetLastError(), + "expected error ERROR_INVALID_PARAMETER, got %d/%x\n",GetLastError(), GetLastError()); + + SetLastError(0xdeadbeef); + bret = pCheckRemoteDebuggerPresent(GetCurrentProcess(),NULL); + ok(!bret , "expected CheckRemoteDebuggerPresent to fail\n"); + ok(ERROR_INVALID_PARAMETER == GetLastError(), + "expected error ERROR_INVALID_PARAMETER, got %d/%x\n",GetLastError(), GetLastError()); +} + START_TEST(debugger) { HMODULE hdll;
hdll=GetModuleHandle("kernel32.dll"); + pCheckRemoteDebuggerPresent=(void*)GetProcAddress(hdll, "CheckRemoteDebuggerPresent"); pDebugActiveProcessStop=(void*)GetProcAddress(hdll, "DebugActiveProcessStop"); pDebugSetProcessKillOnExit=(void*)GetProcAddress(hdll, "DebugSetProcessKillOnExit");
@@ -451,5 +483,6 @@ START_TEST(debugger) else { test_ExitCode(); + test_RemoteDebugger(); } }