Nikolay Sivov : comctl32/monthcal: Fix parameter validation in MCM_SETCURSEL handler.
Alexandre Julliard
julliard at winehq.org
Tue Oct 6 10:35:48 CDT 2009
Module: wine
Branch: master
Commit: 2d2edc9a837127c622a964a0d9cde7daa388348b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2d2edc9a837127c622a964a0d9cde7daa388348b
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Mon Oct 5 23:05:53 2009 +0400
comctl32/monthcal: Fix parameter validation in MCM_SETCURSEL handler.
---
dlls/comctl32/monthcal.c | 10 +++++-----
dlls/comctl32/tests/monthcal.c | 17 +++++++++++++++++
2 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index ad54074..02751b6 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -252,11 +252,11 @@ static BOOL MONTHCAL_IsDateInValidRange(const MONTHCAL_INFO *infoPtr, const SYST
(MONTHCAL_CompareSystemTime(date, &min_allowed_date) == -1)) return FALSE;
if(infoPtr->rangeValid & GDTR_MAX) {
- if((MONTHCAL_CompareSystemTime(date, &infoPtr->maxSel) == 1)) return FALSE;
+ if((MONTHCAL_CompareSystemTime(date, &infoPtr->maxDate) == 1)) return FALSE;
}
if(infoPtr->rangeValid & GDTR_MIN) {
- if((MONTHCAL_CompareSystemTime(date, &infoPtr->minSel) == -1)) return FALSE;
+ if((MONTHCAL_CompareSystemTime(date, &infoPtr->minDate) == -1)) return FALSE;
}
return TRUE;
@@ -1255,14 +1255,14 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
if(infoPtr->dwStyle & MCS_MULTISELECT) return FALSE;
if(!MONTHCAL_ValidateDate(curSel)) return FALSE;
+ /* exit earlier if selection equals current */
+ if (MONTHCAL_IsDateEqual(&infoPtr->curSel, curSel)) return TRUE;
+
if(!MONTHCAL_IsDateInValidRange(infoPtr, curSel)) return FALSE;
infoPtr->minSel = *curSel;
infoPtr->maxSel = *curSel;
- /* exit earlier if selection equals current */
- if (MONTHCAL_IsDateEqual(&infoPtr->curSel, curSel)) return TRUE;
-
infoPtr->curSel = *curSel;
/* FIXME: it's possible to reduce rectangle here */
diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c
index 3b38e82..8234126 100644
--- a/dlls/comctl32/tests/monthcal.c
+++ b/dlls/comctl32/tests/monthcal.c
@@ -822,6 +822,23 @@ static void test_monthcal_currdate(void)
expect(st_original.wMinute, st_test.wMinute);
expect(st_original.wSecond, st_test.wSecond);
+ /* setting selection equal to current reports success even if out range */
+ memset(&st_new, 0, sizeof(st_new));
+ st_new.wYear = 2009;
+ st_new.wDay = 5;
+ st_new.wMonth = 10;
+ res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st_new);
+ expect(1, res);
+ memset(&st_test, 0, sizeof(st_test));
+ st_test.wYear = 2009;
+ st_test.wDay = 6;
+ st_test.wMonth = 10;
+ res = SendMessage(hwnd, MCM_SETRANGE, GDTR_MIN, (LPARAM)&st_test);
+ expect(1, res);
+ /* set to current again */
+ res = SendMessage(hwnd, MCM_SETCURSEL, 0, (LPARAM)&st_new);
+ expect(1, res);
+
DestroyWindow(hwnd);
}
More information about the wine-cvs
mailing list