Skip to content

Commit a45f8f0

Browse files
committed
Match abbreviated day and month names with head of full names
1 parent b7a8229 commit a45f8f0

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

ext/date/date_strptime.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@
1010
static const char *day_names[] = {
1111
"Sunday", "Monday", "Tuesday", "Wednesday",
1212
"Thursday", "Friday", "Saturday",
13-
"Sun", "Mon", "Tue", "Wed",
14-
"Thu", "Fri", "Sat"
1513
};
1614

1715
static const char *month_names[] = {
1816
"January", "February", "March", "April",
1917
"May", "June", "July", "August", "September",
2018
"October", "November", "December",
21-
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
22-
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
2319
};
2420

2521
static const char *merid_names[] = {
@@ -209,10 +205,12 @@ date__strptime_internal(const char *str, size_t slen,
209205
int i;
210206

211207
for (i = 0; i < (int)sizeof_array(day_names); i++) {
212-
size_t l = strlen(day_names[i]);
213-
if (strncasecmp(day_names[i], &str[si], l) == 0) {
208+
const char *day_name = day_names[i];
209+
size_t l = strlen(day_name);
210+
if ((slen - si >= l && strncasecmp(day_name, &str[si], l) == 0) ||
211+
(slen - si >= (l = 3) && strncasecmp(day_name, &str[si], l) == 0)) {
214212
si += l;
215-
set_hash("wday", INT2FIX(i % 7));
213+
set_hash("wday", INT2FIX(i));
216214
goto matched;
217215
}
218216
}
@@ -225,10 +223,12 @@ date__strptime_internal(const char *str, size_t slen,
225223
int i;
226224

227225
for (i = 0; i < (int)sizeof_array(month_names); i++) {
228-
size_t l = strlen(month_names[i]);
229-
if (strncasecmp(month_names[i], &str[si], l) == 0) {
226+
const char *month_name = month_names[i];
227+
size_t l = strlen(month_name);
228+
if ((slen - si >= l && strncasecmp(month_name, &str[si], l) == 0) ||
229+
(slen - si >= (l = 3) && strncasecmp(month_name, &str[si], l) == 0)) {
230230
si += l;
231-
set_hash("mon", INT2FIX((i % 12) + 1));
231+
set_hash("mon", INT2FIX(i + 1));
232232
goto matched;
233233
}
234234
}

0 commit comments

Comments
 (0)