From 4f7230767562d104dc94fad2809171b76148ef04 Mon Sep 17 00:00:00 2001 From: Kamil Hornicek Date: Wed, 22 Feb 2017 10:29:03 +0000 Subject: [PATCH] [NTUSER] - Prevent a null to be passed to UserDereferenceObject in UserSetCursorIconData. CID 1321971 - Make the status check in co_IntCallSentMessageCallback less useless. CID 1322014 - Prevent a null pointer dereference in a trace in IntCreateClass. CID 514617 svn path=/trunk/; revision=73879 --- reactos/win32ss/user/ntuser/callback.c | 1 + reactos/win32ss/user/ntuser/callproc.c | 6 +++--- reactos/win32ss/user/ntuser/class.c | 4 +++- reactos/win32ss/user/ntuser/cursoricon.c | 4 +++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/reactos/win32ss/user/ntuser/callback.c b/reactos/win32ss/user/ntuser/callback.c index 4ab876cc44f..fb9fc9692d5 100644 --- a/reactos/win32ss/user/ntuser/callback.c +++ b/reactos/win32ss/user/ntuser/callback.c @@ -279,6 +279,7 @@ co_IntCallSentMessageCallback(SENDASYNCPROC CompletionCallback, if (!NT_SUCCESS(Status)) { + ERR("KeUserModeCallback failed with %lx\n", Status); return; } return; diff --git a/reactos/win32ss/user/ntuser/callproc.c b/reactos/win32ss/user/ntuser/callproc.c index aff88c47466..1a80fdd52f9 100644 --- a/reactos/win32ss/user/ntuser/callproc.c +++ b/reactos/win32ss/user/ntuser/callproc.c @@ -47,10 +47,10 @@ CreateCallProc(IN PDESKTOP Desktop, NewCallProc->pfnClientPrevious = WndProc; NewCallProc->wType |= Unicode ? UserGetCPDA2U : UserGetCPDU2A ; NewCallProc->spcpdNext = NULL; - } - /* Release the extra reference (UserCreateObject added 2 references) */ - if (NewCallProc != NULL) UserDereferenceObject(NewCallProc); + /* Release the extra reference (UserCreateObject added 2 references) */ + UserDereferenceObject(NewCallProc); + } return NewCallProc; } diff --git a/reactos/win32ss/user/ntuser/class.c b/reactos/win32ss/user/ntuser/class.c index d3fc8bb020a..ad8c8d4b1c6 100644 --- a/reactos/win32ss/user/ntuser/class.c +++ b/reactos/win32ss/user/ntuser/class.c @@ -1228,7 +1228,8 @@ NoMem: } TRACE("Created class 0x%p with name %wZ and proc 0x%p for atom 0x%x and version atom 0x%x and hInstance 0x%p, global %u\n", - Class, ClassName, Class->lpfnWndProc, Atom, verAtom, Class->hModule, Class->Global); + Class, ClassName, Class ? Class->lpfnWndProc : NULL, Atom, verAtom, + Class ? Class->hModule : NULL , Class ? Class->Global : 0); return Class; } @@ -2332,6 +2333,7 @@ UserRegisterSystemClasses(VOID) if (SYSTEMCUR(ARROW) == NULL) { ERR("SYSTEMCUR(ARROW) == NULL, should not happen!!\n"); + ASSERT(FALSE); } else { diff --git a/reactos/win32ss/user/ntuser/cursoricon.c b/reactos/win32ss/user/ntuser/cursoricon.c index d8c78106060..457e0cc1d58 100644 --- a/reactos/win32ss/user/ntuser/cursoricon.c +++ b/reactos/win32ss/user/ntuser/cursoricon.c @@ -1494,7 +1494,9 @@ Exit: } /* Dereference the cursor and return the result */ - UserDereferenceObject(pcur); + if (pcur) + UserDereferenceObject(pcur); + return bResult; }