diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-09-22 20:02:58 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-09-22 20:02:58 +0100 |
commit | 49ff88bd0d8a36a9e903f01ce05685cfe07dee5d (patch) | |
tree | cb98506a941642825651753585aa5e5b41065cab | |
parent | 809192e77e6e112a0fe32dee7fada7a49fbf25cd (diff) | |
download | gcc-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.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/filesystem/path/append/source.cc | 10 |
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(); } |