Rémi Bernon : win32u: Avoid invalid access when registered device alloc failed. (Coverity).
Alexandre Julliard
julliard at winehq.org
Mon Aug 8 15:17:51 CDT 2022
Module: wine
Branch: master
Commit: a42b22e027e2be20f7f3a924eddeee92b7bbc99d
URL: https://gitlab.winehq.org/wine/wine/-/commit/a42b22e027e2be20f7f3a924eddeee92b7bbc99d
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Sat Aug 6 10:16:58 2022 +0200
win32u: Avoid invalid access when registered device alloc failed. (Coverity).
---
dlls/win32u/rawinput.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/dlls/win32u/rawinput.c b/dlls/win32u/rawinput.c
index 2dc03e7fe2d..cf150b60a8c 100644
--- a/dlls/win32u/rawinput.c
+++ b/dlls/win32u/rawinput.c
@@ -821,6 +821,7 @@ static void register_rawinput_device( const RAWINPUTDEVICE *device )
BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT device_count, UINT device_size )
{
struct rawinput_device *server_devices;
+ RAWINPUTDEVICE *new_registered_devices;
SIZE_T size;
BOOL ret;
UINT i;
@@ -863,8 +864,15 @@ BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT d
}
size = (SIZE_T)device_size * (registered_device_count + device_count);
- registered_devices = realloc( registered_devices, size );
- if (registered_devices) for (i = 0; i < device_count; ++i) register_rawinput_device( devices + i );
+ if (!(new_registered_devices = realloc( registered_devices, size )))
+ {
+ pthread_mutex_unlock( &rawinput_mutex );
+ SetLastError( ERROR_OUTOFMEMORY );
+ return FALSE;
+ }
+
+ registered_devices = new_registered_devices;
+ for (i = 0; i < device_count; ++i) register_rawinput_device( devices + i );
if (!(device_count = registered_device_count)) server_devices = NULL;
else if (!(server_devices = malloc( device_count * sizeof(*server_devices) )))
@@ -893,12 +901,6 @@ BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT d
pthread_mutex_unlock( &rawinput_mutex );
- if (!registered_devices)
- {
- SetLastError( ERROR_OUTOFMEMORY );
- return FALSE;
- }
-
return ret;
}
More information about the wine-cvs
mailing list