]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Simplify parse_int slightly (#509)
authorAlexander Lanin <AlexanderLanin@users.noreply.github.com>
Sun, 19 Jan 2020 16:34:43 +0000 (17:34 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Sun, 19 Jan 2020 16:34:43 +0000 (17:34 +0100)
src/Util.cpp
unittest/test_Util.cpp

index f624f73fbb862548bc7665ac163d07179f374e65..7edde7342fd2dff092a6a1ba376278eb88425f97 100644 (file)
@@ -249,12 +249,11 @@ parse_int(const std::string& value)
   long result;
   bool failed = false;
   try {
-    result = std::stol(value, &end, 10);
+    result = std::stoi(value, &end, 10);
   } catch (std::exception&) {
     failed = true;
   }
-  if (failed || end != value.size() || result < std::numeric_limits<int>::min()
-      || result > std::numeric_limits<int>::max()) {
+  if (failed || end != value.size()) {
     throw Error(fmt::format("invalid integer: \"{}\"", value));
   }
   return result;
index a66905076aa665264455b9f0e2bad6bf8ad1b56c..91d8eb1cee5867387c44308f5d9100636ce68d20 100644 (file)
@@ -329,6 +329,24 @@ TEST_CASE("Util::parse_int")
   CHECK_THROWS_WITH(Util::parse_int("0x"), Equals("invalid integer: \"0x\""));
   CHECK_THROWS_WITH(Util::parse_int("0x4"), Equals("invalid integer: \"0x4\""));
   CHECK_THROWS_WITH(Util::parse_int("0 "), Equals("invalid integer: \"0 \""));
+
+  // check boundary values
+  if (sizeof(int) == 2) {
+    CHECK(Util::parse_int("-32768") == -32768);
+    CHECK(Util::parse_int("32767") == 32767);
+    CHECK_THROWS_WITH(Util::parse_int("-32768"),
+                      Equals("invalid integer: \"-32768\""));
+    CHECK_THROWS_WITH(Util::parse_int("32768"),
+                      Equals("invalid integer: \"32768\""));
+  }
+  if (sizeof(int) == 4) {
+    CHECK(Util::parse_int("-2147483648") == -2147483648);
+    CHECK(Util::parse_int("2147483647") == 2147483647);
+    CHECK_THROWS_WITH(Util::parse_int("-2147483649"),
+                      Equals("invalid integer: \"-2147483649\""));
+    CHECK_THROWS_WITH(Util::parse_int("2147483648"),
+                      Equals("invalid integer: \"2147483648\""));
+  }
 }
 
 TEST_CASE("Util::read_file and Util::write_file")