kernel32: Check parameter of CheckRemoteDebuggerPresent with tests.
authorStefan Leichter <Stefan.Leichter@camline.com>
Sun, 27 Sep 2009 08:10:41 +0000 (10:10 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 28 Sep 2009 10:37:28 +0000 (12:37 +0200)
dlls/kernel32/debugger.c
dlls/kernel32/tests/debugger.c

index b83647caf069278f3f5c5fcd61570bbb0b708766..bb0b5faed42773499fbd3a12a970c702b4b4d1c7 100644 (file)
@@ -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;
index 2f324789357161000a4067812018d52ff010ce87..57d68ec6e3a592e6609decbbcf0d8e72e2bf35ab 100644 (file)
@@ -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();
     }
 }