diff options
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/date.c | 27 |
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(); |