From 6efeaabef05253cfce64f2d7c94be57cd7d4acd5 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 30 Oct 2022 00:43:54 +0900 Subject: [ruby/date] Match abbreviated day and month names with head of full names https://github.com/ruby/date/commit/a45f8f03c9 --- ext/date/date_strptime.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ext/date/date_strptime.c b/ext/date/date_strptime.c index 7b06a31471..fa1ed4c7e7 100644 --- a/ext/date/date_strptime.c +++ b/ext/date/date_strptime.c @@ -10,16 +10,12 @@ static const char *day_names[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", - "Sun", "Mon", "Tue", "Wed", - "Thu", "Fri", "Sat" }; static const char *month_names[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; static const char *merid_names[] = { @@ -209,10 +205,12 @@ date__strptime_internal(const char *str, size_t slen, int i; for (i = 0; i < (int)sizeof_array(day_names); i++) { - size_t l = strlen(day_names[i]); - if (strncasecmp(day_names[i], &str[si], l) == 0) { + const char *day_name = day_names[i]; + size_t l = strlen(day_name); + if ((slen - si >= l && strncasecmp(day_name, &str[si], l) == 0) || + (slen - si >= (l = 3) && strncasecmp(day_name, &str[si], l) == 0)) { si += l; - set_hash("wday", INT2FIX(i % 7)); + set_hash("wday", INT2FIX(i)); goto matched; } } @@ -225,10 +223,12 @@ date__strptime_internal(const char *str, size_t slen, int i; for (i = 0; i < (int)sizeof_array(month_names); i++) { - size_t l = strlen(month_names[i]); - if (strncasecmp(month_names[i], &str[si], l) == 0) { + const char *month_name = month_names[i]; + size_t l = strlen(month_name); + if ((slen - si >= l && strncasecmp(month_name, &str[si], l) == 0) || + (slen - si >= (l = 3) && strncasecmp(month_name, &str[si], l) == 0)) { si += l; - set_hash("mon", INT2FIX((i % 12) + 1)); + set_hash("mon", INT2FIX(i + 1)); goto matched; } } -- cgit v1.2.3