From 9711cdbcabfce9910196f75451f0ada977d3560d Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 11 Oct 2011 14:10:17 +0900 Subject: [PATCH] user32: Respect the requested size of NONCLIENTMETRICSW structure. --- dlls/user32/sysparams.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index afa15a251ad..3c7da430bae 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;