Module: wine Branch: master Commit: 197f867feff0bddaca0c2d2470fbaa04acd6e3b7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=197f867feff0bddaca0c2d2470...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Oct 10 12:05:14 2011 +0900
user32: Fix the logic deciding when to write to the destination structure.
---
dlls/user32/sysparams.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 15838ed..afa15a2 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -463,10 +463,13 @@ static void SYSPARAMS_NonClientMetrics32WTo32A( const NONCLIENTMETRICSW* lpnm32W SYSPARAMS_LogFont32WTo32A( &lpnm32W->lfMenuFont, &lpnm32A->lfMenuFont ); SYSPARAMS_LogFont32WTo32A( &lpnm32W->lfStatusFont, &lpnm32A->lfStatusFont ); SYSPARAMS_LogFont32WTo32A( &lpnm32W->lfMessageFont, &lpnm32A->lfMessageFont ); - if (lpnm32A->cbSize == sizeof(NONCLIENTMETRICSA) && lpnm32W->cbSize == sizeof(NONCLIENTMETRICSW)) - lpnm32A->iPaddedBorderWidth = lpnm32W->iPaddedBorderWidth; - else - lpnm32A->iPaddedBorderWidth = 0; + if (lpnm32A->cbSize > FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth)) + { + if (lpnm32W->cbSize > FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth)) + lpnm32A->iPaddedBorderWidth = lpnm32W->iPaddedBorderWidth; + else + lpnm32A->iPaddedBorderWidth = 0; + } }
static void SYSPARAMS_NonClientMetrics32ATo32W( const NONCLIENTMETRICSA* lpnm32A, LPNONCLIENTMETRICSW lpnm32W ) @@ -485,10 +488,13 @@ static void SYSPARAMS_NonClientMetrics32ATo32W( const NONCLIENTMETRICSA* lpnm32A SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfMenuFont, &lpnm32W->lfMenuFont ); SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfStatusFont, &lpnm32W->lfStatusFont ); SYSPARAMS_LogFont32ATo32W( &lpnm32A->lfMessageFont, &lpnm32W->lfMessageFont ); - if (lpnm32A->cbSize == sizeof(NONCLIENTMETRICSA) && lpnm32W->cbSize == sizeof(NONCLIENTMETRICSW)) - lpnm32W->iPaddedBorderWidth = lpnm32A->iPaddedBorderWidth; - else - lpnm32W->iPaddedBorderWidth = 0; + if (lpnm32W->cbSize > FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth)) + { + if (lpnm32A->cbSize > FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth)) + lpnm32W->iPaddedBorderWidth = lpnm32A->iPaddedBorderWidth; + else + lpnm32W->iPaddedBorderWidth = 0; + } }