diff options
Diffstat (limited to 'package/utils/busybox/patches/003-upstream_date_fix.patch')
-rw-r--r-- | package/utils/busybox/patches/003-upstream_date_fix.patch | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/package/utils/busybox/patches/003-upstream_date_fix.patch b/package/utils/busybox/patches/003-upstream_date_fix.patch new file mode 100644 index 0000000000..5b389c4794 --- /dev/null +++ b/package/utils/busybox/patches/003-upstream_date_fix.patch @@ -0,0 +1,30 @@ +--- a/libbb/time.c ++++ b/libbb/time.c +@@ -68,15 +68,23 @@ void FAST_FUNC parse_datestr(const char + /* else end != NUL and we error out */ + } + } else +- /* yyyy-mm-dd HH */ +- if (sscanf(date_str, "%u-%u-%u %u%c", &ptm->tm_year, ++ if (strchr(date_str, '-') ++ /* Why strchr('-') check? ++ * sscanf below will trash ptm->tm_year, this breaks ++ * if parse_str is "10101010" (iow, "MMddhhmm" form) ++ * because we destroy year. Do these sscanf ++ * only if we saw a dash in parse_str. ++ */ ++ /* yyyy-mm-dd HH */ ++ && (sscanf(date_str, "%u-%u-%u %u%c", &ptm->tm_year, + &ptm->tm_mon, &ptm->tm_mday, + &ptm->tm_hour, + &end) >= 4 +- /* yyyy-mm-dd */ +- || sscanf(date_str, "%u-%u-%u%c", &ptm->tm_year, ++ /* yyyy-mm-dd */ ++ || sscanf(date_str, "%u-%u-%u%c", &ptm->tm_year, + &ptm->tm_mon, &ptm->tm_mday, + &end) >= 3 ++ ) + ) { + ptm->tm_year -= 1900; /* Adjust years */ + ptm->tm_mon -= 1; /* Adjust month from 1-12 to 0-11 */ |