From: Martin Blanchard <49144287+mablanchard@users.noreply.github.com> Date: Mon, 16 Oct 2023 19:06:47 +0000 (+0200) Subject: fix: Fix Windows is_absolute_path() crash on drive letter (#1338) X-Git-Tag: v4.9~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cdc51b2e61f13ffc433bbb341e81a514f3bd86a3;p=thirdparty%2Fccache.git fix: Fix Windows is_absolute_path() crash on drive letter (#1338) --- diff --git a/src/util/path.cpp b/src/util/path.cpp index 29822ea3e..3473cdd01 100644 --- a/src/util/path.cpp +++ b/src/util/path.cpp @@ -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; } diff --git a/unittest/test_util_path.cpp b/unittest/test_util_path.cpp index 24d78558c..1e6ff03c4 100644 --- a/unittest/test_util_path.cpp +++ b/unittest/test_util_path.cpp @@ -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"));