user32: Respect the requested size of NONCLIENTMETRICSW structure.

Dmitry Timoshkov dmitry at baikal.ru
Tue Oct 11 00:10:17 CDT 2011


This patch should fix the regression reported in the bug 28642.
---
 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;
-- 
1.7.5.1




More information about the wine-patches mailing list