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