Andy Bradford wrote:
> And here is the patch:
> 
> Index: calendar/day.c
> ===================================================================
> RCS file: /home/cvs/src/usr.bin/calendar/day.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 day.c
> --- calendar/day.c    8 Dec 2015 19:04:50 -0000       1.32
> +++ calendar/day.c    9 Jul 2016 20:53:13 -0000
> @@ -543,8 +543,9 @@ isnow(char *endp, int bodun)
>                               tdiff = difftime(ttmp, f_time)/ SECSPERDAY;
>                               if (tdiff <= offset + f_dayAfter ||
>                                   (bodun && tdiff == -1)) {
> -                                     if (tdiff >=  0 ||
> -                                         (bodun && tdiff == -1)) {
> +                                     if ((tmtmp.tm_mon == month) &&
> +                                         (tdiff >=  0 ||
> +                                         (bodun && tdiff == -1))) {
>                                       if ((tmp = malloc(sizeof(struct 
> match))) == NULL)
>                                               err(1, NULL);
>                                       tmp->when = ttmp;
> 
> This works because when variable_weekday returns it places a value in v1
> that is larger  than a month's worth  of days. For example,  for July 1,
> 2016, Sunday+5  gets a  value of  33 in  tmtmp.tm_mday for  which mktime
> advances advances the month to account  for the extra days when creating
> the  timestamp. Now  the months  are different  and should  probably not
> count as a match.

That makes sense. I guess the failure to check month was an oversight, not
expecting it could change.

Reply via email to