1010static const char * day_names [] = {
1111 "Sunday" , "Monday" , "Tuesday" , "Wednesday" ,
1212 "Thursday" , "Friday" , "Saturday" ,
13- "Sun" , "Mon" , "Tue" , "Wed" ,
14- "Thu" , "Fri" , "Sat"
1513};
1614
1715static 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
2521static 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