Module: wine Branch: master Commit: 24a16c0037fd7c0f0d15c6980e4cc77ea642e89e URL: https://source.winehq.org/git/wine.git/?a=commit;h=24a16c0037fd7c0f0d15c6980...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Sep 9 14:57:45 2019 +0800
localspl: Fix MONITOR2.cbSize calculation when converting from MONITOREX.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/localspl/localmon.c | 2 +- dlls/localspl/provider.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/localspl/localmon.c b/dlls/localspl/localmon.c index 6937e05..e634a33 100644 --- a/dlls/localspl/localmon.c +++ b/dlls/localspl/localmon.c @@ -777,7 +777,7 @@ LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR regroot) { static MONITOREX mymonitorex = { - sizeof(MONITOREX) - sizeof(DWORD), + sizeof(MONITOR), { localmon_EnumPortsW, localmon_OpenPortW, diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c index 4627284..7a12751 100644 --- a/dlls/localspl/provider.c +++ b/dlls/localspl/provider.c @@ -504,7 +504,9 @@ static monitor_t * monitor_load(LPCWSTR name, LPWSTR dllname) if (pmonitorEx) { /* Layout of MONITOREX and MONITOR2 mostly matches */ - memcpy(&pm->monitor, pmonitorEx, min(pmonitorEx->dwMonitorSize + sizeof(DWORD), sizeof(pm->monitor))); + memcpy(&pm->monitor, pmonitorEx, min(pmonitorEx->dwMonitorSize + sizeof(void *), sizeof(pm->monitor))); + /* MONITOREX.dwMonitorSize doesn't include the size field, while MONITOR2.cbSize does */ + pm->monitor.cbSize += sizeof(void *); pm->old_XcvOpenPort = pmonitorEx->Monitor.pfnXcvOpenPort; pm->monitor.pfnXcvOpenPort = NULL; }