[PATCH v2 1/8] cmd: date: validate date using rtc_month_days()

Sverdlin, Alexander alexander.sverdlin at siemens.com
Tue May 12 09:45:33 CEST 2026


On Mon, 2026-05-11 at 14:09 +0200, Alexander Feilke wrote:
> From: Markus Niebel <Markus.Niebel at ew.tq-group.com>
> 
> The old check accepted day 0 as well as Feb 29th in non-leap years.
> With this change, both day and month 0 are rejected, and the local day limit
> logic is now handled by rtc_month_days(), which correctly accounts for month
> length and leap years.
> 
> Because of this, special attention must be taken in the 'MMDDhhmm' format case,
> as tm_year is not initialized. The leap-year calculation in rtc_month_days()
> therefore depends on the value provided by the caller. This is pre-existing
> behaviour, but is now made more explicit.
> 
> Signed-off-by: Markus Niebel <Markus.Niebel at ew.tq-group.com>
> Signed-off-by: Alexander Feilke <alexander.feilke at ew.tq-group.com>

Reviewed-by: Alexander Sverdlin <alexander.sverdlin at siemens.com>

> ---
>  cmd/date.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/cmd/date.c b/cmd/date.c
> index d047872289c..b0da0cbd69c 100644
> --- a/cmd/date.c
> +++ b/cmd/date.c
> @@ -167,12 +167,13 @@ int mk_date (const char *datestr, struct rtc_time *tmp)
>  		/* fall thru */
>  	case 12:		/* MMDDhhmmCCYY	*/
>  		if (cnvrt2 (datestr+0, &val) ||
> -		    val > 12) {
> +		    val > 12 || val < 1) {
>  			break;
>  		}
>  		tmp->tm_mon  = val;
> -		if (cnvrt2 (datestr+2, &val) ||
> -		    val > ((tmp->tm_mon==2) ? 29 : 31)) {
> +		if (cnvrt2(datestr+2, &val) ||
> +		    val < 1 ||
> +		    val > rtc_month_days(tmp->tm_mon - 1, tmp->tm_year)) {
>  			break;
>  		}
>  		tmp->tm_mday = val;

-- 
Alexander Sverdlin
Siemens AG
www.siemens.com


More information about the U-Boot mailing list