Dmitry Timoshkov : user32: Respect the requested size of NONCLIENTMETRICSW structure.

Alexandre Julliard julliard at winehq.org
Tue Oct 11 14:03:38 CDT 2011


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

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Tue Oct 11 14:10:17 2011 +0900

user32: Respect the requested size of NONCLIENTMETRICSW structure.

---

 dlls/user32/sysparams.c |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index afa15a2..3c7da43 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -1582,11 +1582,21 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
     {
         LPNONCLIENTMETRICSW lpnm = pvParam;
 
+        if (!lpnm)
+        {
+            ret = FALSE;
+            break;
+        }
+
         if (!spi_loaded[SPI_NONCLIENTMETRICS_IDX]) load_nonclient_metrics();
 
-        if (lpnm && (lpnm->cbSize == sizeof(NONCLIENTMETRICSW) ||
-                     lpnm->cbSize == FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth)))
+        if (lpnm->cbSize == sizeof(NONCLIENTMETRICSW))
             *lpnm = nonclient_metrics;
+        else if (lpnm->cbSize == FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth))
+        {
+            memcpy(lpnm, &nonclient_metrics, FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth));
+            lpnm->cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, iPaddedBorderWidth);
+        }
         else
             ret = FALSE;
         break;




More information about the wine-cvs mailing list