Torge Matthies : win32u: Validate the info parameter in NtUserEnumDisplayDevices.
Module: wine Branch: master Commit: 286b99a4a2f630d73a6d47c265f77198bfe51c78 URL: https://source.winehq.org/git/wine.git/?a=commit;h=286b99a4a2f630d73a6d47c26... Author: Torge Matthies <openglfreak(a)googlemail.com> Date: Fri Dec 10 02:07:00 2021 +0100 win32u: Validate the info parameter in NtUserEnumDisplayDevices. Signed-off-by: Torge Matthies <openglfreak(a)googlemail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/win32u/sysparams.c | 2 ++ dlls/win32u/tests/win32u.c | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index b3d2b6c7d11..e06a63bd4cd 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1571,6 +1571,8 @@ NTSTATUS WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index, TRACE( "%s %u %p %#x\n", debugstr_us( device ), index, info, flags ); + if (!info || !info->cb) return STATUS_UNSUCCESSFUL; + if (!lock_display_devices()) return STATUS_UNSUCCESSFUL; if (!device || !device->Length) diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 10ffd36d134..13c732b7748 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -45,15 +45,23 @@ static void test_NtUserEnumDisplayDevices(void) SetLastError( 0xdeadbeef ); ret = NtUserEnumDisplayDevices( NULL, 0, &info, 0 ); - todo_wine ok( ret == STATUS_UNSUCCESSFUL && GetLastError() == 0xdeadbeef, - "NtUserEnumDisplayDevices returned %x %u\n", ret, - GetLastError() ); + ok( ret == STATUS_UNSUCCESSFUL && GetLastError() == 0xdeadbeef, + "NtUserEnumDisplayDevices returned %x %u\n", ret, GetLastError() ); SetLastError( 0xdeadbeef ); ret = NtUserEnumDisplayDevices( NULL, 12345, &info, 0 ); ok( ret == STATUS_UNSUCCESSFUL && GetLastError() == 0xdeadbeef, - "NtUserEnumDisplayDevices returned %x %u\n", ret, - GetLastError() ); + "NtUserEnumDisplayDevices returned %x %u\n", ret, GetLastError() ); + + SetLastError( 0xdeadbeef ); + ret = NtUserEnumDisplayDevices( NULL, 0, NULL, 0 ); + ok( ret == STATUS_UNSUCCESSFUL && GetLastError() == 0xdeadbeef, + "NtUserEnumDisplayDevices returned %x %u\n", ret, GetLastError() ); + + SetLastError( 0xdeadbeef ); + ret = NtUserEnumDisplayDevices( NULL, 12345, NULL, 0 ); + ok( ret == STATUS_UNSUCCESSFUL && GetLastError() == 0xdeadbeef, + "NtUserEnumDisplayDevices returned %x %u\n", ret, GetLastError() ); } static void test_NtUserCloseWindowStation(void)
participants (1)
-
Alexandre Julliard