aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/date.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/coreutils/date.c b/coreutils/date.c
index 51200e64c..11b63eaeb 100644
--- a/coreutils/date.c
+++ b/coreutils/date.c
@@ -123,8 +123,33 @@ int date_main(int argc UNUSED_PARAM, char **argv)
123 if (!(opt & (OPT_SET | OPT_DATE))) { 123 if (!(opt & (OPT_SET | OPT_DATE))) {
124 opt |= OPT_SET; 124 opt |= OPT_SET;
125 date_str = argv[0]; /* can be NULL */ 125 date_str = argv[0]; /* can be NULL */
126 if (date_str) 126 if (date_str) {
127#if ENABLE_DESKTOP
128 int len = strspn(date_str, "0123456789");
129 if (date_str[len] == '\0'
130 || (date_str[len] == '.'
131 && isdigit(date_str[len+1])
132 && isdigit(date_str[len+2])
133 && date_str[len+3] == '\0'
134 )
135 ) {
136 /* Dreaded [MMDDhhmm[[CC]YY][.ss]] format!
137 * It does not match -d or -s format.
138 * Some users actually do use it.
139 */
140 len -= 8;
141 if (len < 0 || len > 4 || (len & 1))
142 bb_error_msg_and_die(bb_msg_invalid_date, date_str);
143 if (len != 0) { /* move YY or CCYY to front */
144 char buf[4];
145 memcpy(buf, date_str + 8, len);
146 memmove(date_str + len, date_str, 8);
147 memcpy(date_str, buf, len);
148 }
149 }
150#endif
127 argv++; 151 argv++;
152 }
128 } 153 }
129 if (*argv) 154 if (*argv)
130 bb_show_usage(); 155 bb_show_usage();