[前][次][番号順一覧][スレッド一覧]

ruby-changes:74497

From: Nobuyoshi <ko1@a...>
Date: Tue, 15 Nov 2022 09:04:43 +0900 (JST)
Subject: [ruby-changes:74497] 5c3dba83fa (master): Re-order checks for colons in UTC offset

https://git.ruby-lang.org/ruby.git/commit/?id=5c3dba83fa

From 5c3dba83faee9dca30fa37d14c52419d68300409 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
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(-)

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) https://github.com/ruby/ruby/blob/trunk/time.c#L2118
             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) https://github.com/ruby/ruby/blob/trunk/time.c#L2135
                 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


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]