comctl32/datetime: Don't allow an invalid year to be typed in.

This commit is contained in:
Owen Rudge 2012-03-08 11:34:23 +00:00 committed by Alexandre Julliard
parent 3f93230812
commit 9de240bd0e
1 changed files with 15 additions and 2 deletions

View File

@ -847,6 +847,7 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
int fieldNum = infoPtr->select & DTHT_DATEFIELD; int fieldNum = infoPtr->select & DTHT_DATEFIELD;
int i, val=0, clamp_day=0; int i, val=0, clamp_day=0;
SYSTEMTIME date = infoPtr->date; SYSTEMTIME date = infoPtr->date;
int oldyear;
if (infoPtr->select == -1 || infoPtr->nCharsEntered == 0) if (infoPtr->select == -1 || infoPtr->nCharsEntered == 0)
return; return;
@ -859,13 +860,25 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
switch (infoPtr->fieldspec[fieldNum]) { switch (infoPtr->fieldspec[fieldNum]) {
case ONEDIGITYEAR: case ONEDIGITYEAR:
case TWODIGITYEAR: case TWODIGITYEAR:
oldyear = date.wYear;
date.wYear = date.wYear - (date.wYear%100) + val; date.wYear = date.wYear - (date.wYear%100) + val;
if (DATETIME_IsDateInValidRange(infoPtr, &date))
clamp_day = 1; clamp_day = 1;
else
date.wYear = oldyear;
break; break;
case INVALIDFULLYEAR: case INVALIDFULLYEAR:
case FULLYEAR: case FULLYEAR:
oldyear = date.wYear;
date.wYear = val; date.wYear = val;
if (DATETIME_IsDateInValidRange(infoPtr, &date))
clamp_day = 1; clamp_day = 1;
else
date.wYear = oldyear;
break; break;
case ONEDIGITMONTH: case ONEDIGITMONTH:
case TWODIGITMONTH: case TWODIGITMONTH: