]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix: Fix Windows is_absolute_path() crash on drive letter (#1338)
authorMartin Blanchard <49144287+mablanchard@users.noreply.github.com>
Mon, 16 Oct 2023 19:06:47 +0000 (21:06 +0200)
committerGitHub <noreply@github.com>
Mon, 16 Oct 2023 19:06:47 +0000 (21:06 +0200)
src/util/path.cpp
unittest/test_util_path.cpp

index 29822ea3ed16e6f5d893c5313a2537b08002f784..3473cdd019956d84c38c3ab905ac532155592452 100644 (file)
@@ -88,7 +88,7 @@ bool
 is_absolute_path(std::string_view path)
 {
 #ifdef _WIN32
-  if (path.length() >= 2 && path[1] == ':'
+  if (path.length() >= 3 && path[1] == ':'
       && (path[2] == '/' || path[2] == '\\')) {
     return true;
   }
index 24d78558c4d0485cec725ba48305378045de93b4..1e6ff03c46d7e68750ea9ee655b11337f8f8b5ab 100644 (file)
@@ -36,9 +36,11 @@ TEST_CASE("util::is_absolute_path")
 {
 #ifdef _WIN32
   CHECK(util::is_absolute_path("C:/"));
+  CHECK(util::is_absolute_path("C:\\"));
   CHECK(util::is_absolute_path("C:\\foo/fie"));
   CHECK(util::is_absolute_path("/C:\\foo/fie")); // MSYS/Cygwin path
   CHECK(!util::is_absolute_path(""));
+  CHECK(!util::is_absolute_path("C:"));
   CHECK(!util::is_absolute_path("foo\\fie/fum"));
   CHECK(!util::is_absolute_path("C:foo/fie"));
 #endif
@@ -48,7 +50,7 @@ TEST_CASE("util::is_absolute_path")
   CHECK(!util::is_absolute_path("foo/fie"));
 }
 
-TEST_CASE("util::is_absolute_path")
+TEST_CASE("util::is_full_path")
 {
   CHECK(!util::is_full_path(""));
   CHECK(!util::is_full_path("foo"));