aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-09-22 20:02:58 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-09-22 20:02:58 +0100
commit49ff88bd0d8a36a9e903f01ce05685cfe07dee5d (patch)
treecb98506a941642825651753585aa5e5b41065cab
parent809192e77e6e112a0fe32dee7fada7a49fbf25cd (diff)
downloadgcc-49ff88bd0d8a36a9e903f01ce05685cfe07dee5d.zip
gcc-49ff88bd0d8a36a9e903f01ce05685cfe07dee5d.tar.gz
gcc-49ff88bd0d8a36a9e903f01ce05685cfe07dee5d.tar.bz2
libstdc++: Fix out-of-bounds string_view access in filesystem::path [PR 97167]
libstdc++-v3/ChangeLog: PR libstdc++/97167 * src/c++17/fs_path.cc (path::_Parser::root_path()): Check for empty string before inspecting the first character. * testsuite/27_io/filesystem/path/append/source.cc: Append empty string_view to path.
-rw-r--r--libstdc++-v3/src/c++17/fs_path.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc10
2 files changed, 11 insertions, 1 deletions
diff --git a/libstdc++-v3/src/c++17/fs_path.cc b/libstdc++-v3/src/c++17/fs_path.cc
index cea7aa0..6e907b1 100644
--- a/libstdc++-v3/src/c++17/fs_path.cc
+++ b/libstdc++-v3/src/c++17/fs_path.cc
@@ -81,7 +81,7 @@ struct path::_Parser
const size_t len = input.size();
// look for root name or root directory
- if (is_dir_sep(input[0]))
+ if (len && is_dir_sep(input[0]))
{
#if SLASHSLASH_IS_ROOTNAME
// look for root name, such as "//foo"
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc b/libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
index 2fceee9..dc73319 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc
@@ -161,6 +161,15 @@ test06()
test(p2, s.c_str());
}
+void
+test07()
+{
+ path p, p0;
+ std::string_view s;
+ p /= s; // PR libstdc++/97167
+ compare_paths(p, p0);
+}
+
int
main()
{
@@ -170,4 +179,5 @@ main()
test04();
test05();
test06();
+ test07();
}