summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-11-15 09:01:29 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-11-15 09:01:29 +0900
commit5c3dba83faee9dca30fa37d14c52419d68300409 (patch)
treed420f4610efeedbff157845dd0c64f37672cf87e /time.c
parentb7d591643ae37a556217a22e1ee9e9c6ab7cfd3e (diff)
Re-order checks for colons in UTC offset
Diffstat (limited to 'time.c')
-rw-r--r--time.c16
1 files changed, 8 insertions, 8 deletions
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;