summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMarkus Niebel <[email protected]>2026-05-22 17:39:22 +0200
committerTom Rini <[email protected]>2026-06-05 10:14:24 -0600
commit3bf0e5d90c0c74e7dacc185558516cdf1e3b045c (patch)
tree2690a82185c425e5063aaef6d473f0880a4eee60 /cmd
parent58545b01062e7acdaaad15f236301f3f36a6156b (diff)
cmd: date: validate date using rtc_month_days()
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. In the 'MMDDhhmm' format case, tm_year is not initialized by mk_date(). The leap-year calculation in rtc_month_days() therefore depends on the value provided by the caller, which do_date() does, via dm_rtc_get(). This is pre-existing behaviour, but is now made more explicit. Signed-off-by: Markus Niebel <[email protected]> Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Alexander Sverdlin <[email protected]> Signed-off-by: Alexander Feilke <[email protected]>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/date.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/cmd/date.c b/cmd/date.c
index f7ecdac7dd3..67cfaed0d48 100644
--- a/cmd/date.c
+++ b/cmd/date.c
@@ -167,12 +167,13 @@ static 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;