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 */ | 
