]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: check overflow in parse_time()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 Oct 2018 13:23:34 +0000 (22:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 Oct 2018 13:23:34 +0000 (22:23 +0900)
src/basic/time-util.c

index 9115c3bf272e84d6c32014fcd66df5cfba8b8da8..e24eef4082bd586a1516711f93e9f986bb7c5384 100644 (file)
@@ -1048,12 +1048,21 @@ int parse_time(const char *t, usec_t *usec, usec_t default_unit) {
 
                 something = true;
 
+
+                k = ((usec_t) -1) / multiplier;
+                if ((usec_t) l + 1 >= k || (usec_t) z >= k)
+                        return -ERANGE;
+
                 k = (usec_t) z * multiplier;
 
                 for (; n > 0; n--)
                         k /= 10;
 
-                r += (usec_t) l * multiplier + k;
+                k += (usec_t) l * multiplier;
+                if (k >= ((usec_t) -1) - r)
+                        return -ERANGE;
+
+                r += k;
         }
 
         *usec = r;