Dmitry Timoshkov : user32: Fix the logic deciding when to write to the destination structure.

Alexandre Julliard julliard at winehq.org
Mon Oct 10 10:25:37 CDT 2011


Module: wine
Branch: master
Commit: 197f867feff0bddaca0c2d2470fbaa04acd6e3b7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=197f867feff0bddaca0c2d2470fbaa04acd6e3b7

Author: Dmitry Timoshkov <dmitry at 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;
+    }
 }
 
 




More information about the wine-cvs mailing list