[PATCH 3/3] comctl32/monthcal: Make sure set focus date is valid before using it (Valgrind)

Nikolay Sivov nsivov at codeweavers.com
Sun Aug 27 16:07:52 CDT 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/comctl32/monthcal.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 97e0c8c610..b94345c38b 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -641,11 +641,16 @@ static inline void MONTHCAL_GetDayRectI(const MONTHCAL_INFO *infoPtr, RECT *r,
  *
  * NOTE: when calendar index is unknown pass -1
  */
-static inline void MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTEMTIME *date,
-    RECT *r, INT calIdx)
+static BOOL MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTEMTIME *date, RECT *r, INT calIdx)
 {
   INT col, row;
 
+  if (!MONTHCAL_ValidateDate(date))
+  {
+      SetRectEmpty(r);
+      return FALSE;
+  }
+
   if (calIdx == -1)
   {
       INT cmp = MONTHCAL_CompareMonths(date, &infoPtr->calendars[0].month);
@@ -668,6 +673,8 @@ static inline void MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTE
 
   MONTHCAL_GetDayPos(infoPtr, date, &col, &row, calIdx);
   MONTHCAL_GetDayRectI(infoPtr, r, col, row, calIdx);
+
+  return TRUE;
 }
 
 static LRESULT
@@ -739,20 +746,19 @@ static BOOL MONTHCAL_SetDayFocus(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *st)
     if(MONTHCAL_IsDateEqual(&infoPtr->focusedSel, st)) return FALSE;
 
     /* invalidate old focused day */
-    MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1);
-    InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
+    if (MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1))
+      InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
 
     infoPtr->focusedSel = *st;
   }
 
-  MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1);
+  /* On set invalidates new day, on reset clears previous focused day. */
+  if (MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1))
+    InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
 
   if(!st && MONTHCAL_ValidateDate(&infoPtr->focusedSel))
     infoPtr->focusedSel = st_null;
 
-  /* on set invalidates new day, on reset clears previous focused day */
-  InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
-
   return TRUE;
 }
 
@@ -1746,17 +1752,11 @@ MONTHCAL_UpdateToday(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *today)
         return FALSE;
 
     /* Invalidate old and new today day rectangle, and today label. */
-    if (MONTHCAL_ValidateDate(&infoPtr->todaysDate))
-    {
-        MONTHCAL_GetDayRect(infoPtr, &infoPtr->todaysDate, &rect, -1);
+    if (MONTHCAL_GetDayRect(infoPtr, &infoPtr->todaysDate, &rect, -1))
         InvalidateRect(infoPtr->hwndSelf, &rect, FALSE);
-    }
 
-    if (MONTHCAL_ValidateDate(today))
-    {
-        MONTHCAL_GetDayRect(infoPtr, today, &rect, -1);
+    if (MONTHCAL_GetDayRect(infoPtr, today, &rect, -1))
         InvalidateRect(infoPtr->hwndSelf, &rect, FALSE);
-    }
 
     infoPtr->todaysDate = *today;
 
-- 
2.14.1




More information about the wine-patches mailing list