From 5c3dba83faee9dca30fa37d14c52419d68300409 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 15 Nov 2022 09:01:29 +0900 Subject: Re-order checks for colons in UTC offset --- time.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'time.c') diff --git a/time.c b/time.c index b3604dd488..fe4ea00144 100644 --- a/time.c +++ b/time.c @@ -2118,6 +2118,7 @@ utc_offset_arg(VALUE arg) if (s[0] >= 'A' && s[0] <= 'I') { n = (int)s[0] - 'A' + 1; } + /* No 'J' zone */ else if (s[0] >= 'K' && s[0] <= 'M') { n = (int)s[0] - 'A'; } @@ -2134,30 +2135,29 @@ utc_offset_arg(VALUE arg) return UTC_ZONE; } break; /* +HH */ - case 5: /* +HHMM */ - min = s+3; - break; - case 6: /* +HH:MM */ - min = s+4; - break; case 7: /* +HHMMSS */ sec = s+5; + /* fallthrough */ + case 5: /* +HHMM */ min = s+3; break; case 9: /* +HH:MM:SS */ + if (s[6] != ':') goto invalid_utc_offset; sec = s+7; + /* fallthrough */ + case 6: /* +HH:MM */ + if (s[3] != ':') goto invalid_utc_offset; min = s+4; break; default: goto invalid_utc_offset; } if (sec) { - if (sec == s+7 && *(sec-1) != ':') goto invalid_utc_offset; if (!ISDIGIT(sec[0]) || !ISDIGIT(sec[1])) goto invalid_utc_offset; n += (sec[0] * 10 + sec[1] - '0' * 11); + ASSUME(min); } if (min) { - if (min == s+4 && *(min-1) != ':') goto invalid_utc_offset; if (!ISDIGIT(min[0]) || !ISDIGIT(min[1])) goto invalid_utc_offset; if (min[0] > '5') goto invalid_utc_offset; n += (min[0] * 10 + min[1] - '0' * 11) * 60; -- cgit v1.2.3