From: Amine Khaldi Date: Thu, 8 Sep 2016 20:25:30 +0000 (+0000) Subject: [WIN32K] Add some missing parameter checks. Fixes all but 4 tests in win32knt:NtUserE... X-Git-Tag: backups/sndblst@72664~36 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=4e5e90c8544ac8a6935ce70f370df6906114f47e [WIN32K] Add some missing parameter checks. Fixes all but 4 tests in win32knt:NtUserEnumDisplaySettings. By Peter Hater. CORE-11524 svn path=/trunk/; revision=72624 --- diff --git a/reactos/win32ss/user/ntuser/display.c b/reactos/win32ss/user/ntuser/display.c index 5c44f2a1205..85781e41b47 100644 --- a/reactos/win32ss/user/ntuser/display.c +++ b/reactos/win32ss/user/ntuser/display.c @@ -572,8 +572,28 @@ NtUserEnumDisplaySettings( TRACE("Enter NtUserEnumDisplaySettings(%wZ, %lu, %p, 0x%lx)\n", pustrDevice, iModeNum, lpDevMode, dwFlags); + _SEH2_TRY + { + ProbeForWrite(lpDevMode, sizeof(DEVMODEW), 1); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + _SEH2_YIELD(return _SEH2_GetExceptionCode()); + } + _SEH2_END + + if (lpDevMode->dmSize != sizeof(DEVMODEW)) + { + return STATUS_BUFFER_TOO_SMALL; + } + if (pustrDevice) { + if (pustrDevice->Buffer == NULL || pustrDevice->Length == 0) + { + Status = STATUS_INVALID_PARAMETER_1; + } + /* Initialize destination string */ RtlInitEmptyUnicodeString(&ustrDevice, awcDevice, sizeof(awcDevice)); @@ -647,10 +667,16 @@ NtUserEnumDisplaySettings( } _SEH2_END; } + else + { + if (Status == STATUS_UNSUCCESSFUL) + { + Status = STATUS_INVALID_PARAMETER_1; + } + } return Status; } - VOID UserUpdateFullscreen( DWORD flags)