Commit d505c2dc authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/monthcal: Make sure set focus date is valid before using it (Valgrind).

parent a56f49cd
...@@ -641,11 +641,16 @@ static inline void MONTHCAL_GetDayRectI(const MONTHCAL_INFO *infoPtr, RECT *r, ...@@ -641,11 +641,16 @@ static inline void MONTHCAL_GetDayRectI(const MONTHCAL_INFO *infoPtr, RECT *r,
* *
* NOTE: when calendar index is unknown pass -1 * NOTE: when calendar index is unknown pass -1
*/ */
static inline void MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTEMTIME *date, static BOOL MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTEMTIME *date, RECT *r, INT calIdx)
RECT *r, INT calIdx)
{ {
INT col, row; INT col, row;
if (!MONTHCAL_ValidateDate(date))
{
SetRectEmpty(r);
return FALSE;
}
if (calIdx == -1) if (calIdx == -1)
{ {
INT cmp = MONTHCAL_CompareMonths(date, &infoPtr->calendars[0].month); INT cmp = MONTHCAL_CompareMonths(date, &infoPtr->calendars[0].month);
...@@ -668,6 +673,8 @@ static inline void MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTE ...@@ -668,6 +673,8 @@ static inline void MONTHCAL_GetDayRect(const MONTHCAL_INFO *infoPtr, const SYSTE
MONTHCAL_GetDayPos(infoPtr, date, &col, &row, calIdx); MONTHCAL_GetDayPos(infoPtr, date, &col, &row, calIdx);
MONTHCAL_GetDayRectI(infoPtr, r, col, row, calIdx); MONTHCAL_GetDayRectI(infoPtr, r, col, row, calIdx);
return TRUE;
} }
static LRESULT static LRESULT
...@@ -739,20 +746,19 @@ static BOOL MONTHCAL_SetDayFocus(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *st) ...@@ -739,20 +746,19 @@ static BOOL MONTHCAL_SetDayFocus(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *st)
if(MONTHCAL_IsDateEqual(&infoPtr->focusedSel, st)) return FALSE; if(MONTHCAL_IsDateEqual(&infoPtr->focusedSel, st)) return FALSE;
/* invalidate old focused day */ /* invalidate old focused day */
MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1); if (MONTHCAL_GetDayRect(infoPtr, &infoPtr->focusedSel, &r, -1))
InvalidateRect(infoPtr->hwndSelf, &r, FALSE); InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
infoPtr->focusedSel = *st; 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)) if(!st && MONTHCAL_ValidateDate(&infoPtr->focusedSel))
infoPtr->focusedSel = st_null; infoPtr->focusedSel = st_null;
/* on set invalidates new day, on reset clears previous focused day */
InvalidateRect(infoPtr->hwndSelf, &r, FALSE);
return TRUE; return TRUE;
} }
...@@ -1746,17 +1752,11 @@ MONTHCAL_UpdateToday(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *today) ...@@ -1746,17 +1752,11 @@ MONTHCAL_UpdateToday(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *today)
return FALSE; return FALSE;
/* Invalidate old and new today day rectangle, and today label. */ /* Invalidate old and new today day rectangle, and today label. */
if (MONTHCAL_ValidateDate(&infoPtr->todaysDate)) if (MONTHCAL_GetDayRect(infoPtr, &infoPtr->todaysDate, &rect, -1))
{
MONTHCAL_GetDayRect(infoPtr, &infoPtr->todaysDate, &rect, -1);
InvalidateRect(infoPtr->hwndSelf, &rect, FALSE); InvalidateRect(infoPtr->hwndSelf, &rect, FALSE);
}
if (MONTHCAL_ValidateDate(today)) if (MONTHCAL_GetDayRect(infoPtr, today, &rect, -1))
{
MONTHCAL_GetDayRect(infoPtr, today, &rect, -1);
InvalidateRect(infoPtr->hwndSelf, &rect, FALSE); InvalidateRect(infoPtr->hwndSelf, &rect, FALSE);
}
infoPtr->todaysDate = *today; infoPtr->todaysDate = *today;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment