[PATCH 0/1] MR4434: winex11: Free correct pointer when using xf86vm
After allocation the pointer gets shifted by sizeof(xf86vm_modes), so we have to undo that before calling free. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55909 -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4434
From: Fabian Maurer <dark.shadow4(a)web.de> After allocation the pointer gets shifted by sizeof(xf86vm_modes), so we have to undo that before calling free. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55909 --- dlls/winex11.drv/xvidmode.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/xvidmode.c b/dlls/winex11.drv/xvidmode.c index 399d5e90e1e..4563b728a41 100644 --- a/dlls/winex11.drv/xvidmode.c +++ b/dlls/winex11.drv/xvidmode.c @@ -156,14 +156,15 @@ static BOOL xf86vm_get_modes(x11drv_settings_id id, DWORD flags, DEVMODEW **new_ static void xf86vm_free_modes(DEVMODEW *modes) { XF86VidModeModeInfo **xf86vm_modes; + BYTE *ptr = (BYTE *)modes - sizeof(xf86vm_modes); if (modes) { assert(modes[0].dmDriverExtra == sizeof(XF86VidModeModeInfo *)); - memcpy(&xf86vm_modes, (BYTE *)modes - sizeof(xf86vm_modes), sizeof(xf86vm_modes)); + memcpy(&xf86vm_modes, ptr, sizeof(xf86vm_modes)); XFree(xf86vm_modes); } - free(modes); + free(ptr); } static BOOL xf86vm_get_current_mode(x11drv_settings_id id, DEVMODEW *mode) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/4434
Zhiyi Zhang (@zhiyi) commented about dlls/winex11.drv/xvidmode.c:
static void xf86vm_free_modes(DEVMODEW *modes) { XF86VidModeModeInfo **xf86vm_modes; + BYTE *ptr = (BYTE *)modes - sizeof(xf86vm_modes);
if (modes) { assert(modes[0].dmDriverExtra == sizeof(XF86VidModeModeInfo *)); - memcpy(&xf86vm_modes, (BYTE *)modes - sizeof(xf86vm_modes), sizeof(xf86vm_modes)); + memcpy(&xf86vm_modes, ptr, sizeof(xf86vm_modes)); XFree(xf86vm_modes); Let's move free(ptr) into the if (modes) branch or return early if modes is NULL.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4434#note_52800
participants (3)
-
Fabian Maurer -
Fabian Maurer (@DarkShadow44) -
Zhiyi Zhang (@zhiyi)