about summary refs log tree commit diff
path: root/library/std/src/path.rs
diff options
context:
space:
mode:
authorChris Jefferson <caj21@st-andrews.ac.uk>2024-05-13 13:35:54 +0800
committerJubilee Young <workingjubilee@gmail.com>2024-09-11 22:33:12 -0700
commitd6ef1b99e83014122dbd7f4fde8a3487b05ea9b9 (patch)
tree8b6dcd940b78aa8f821c719176668f936882e5ad /library/std/src/path.rs
parent0ee7cb5e3633502d9a90a85c3c367eccd59a0aba (diff)
downloadrust-d6ef1b99e83014122dbd7f4fde8a3487b05ea9b9.tar.gz
rust-d6ef1b99e83014122dbd7f4fde8a3487b05ea9b9.zip
Expand PathBuf documentation
Mention that some methods do not sanitize their input fully
Diffstat (limited to 'library/std/src/path.rs')
-rw-r--r--library/std/src/path.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/library/std/src/path.rs b/library/std/src/path.rs
index 506ad445b6b..e7fd2e4ddee 100644
--- a/library/std/src/path.rs
+++ b/library/std/src/path.rs
@@ -1153,6 +1153,21 @@ impl FusedIterator for Ancestors<'_> {}
 /// ```
 ///
 /// Which method works best depends on what kind of situation you're in.
+///
+/// Note that `PathBuf`` does not always sanitize arguments, for example
+/// [`push`] allows paths built from strings which include separators:
+///
+/// use std::path::PathBuf;
+///
+/// let mut path = PathBuf::new();
+///
+/// path.push(r"C:\");
+/// path.push("windows");
+/// path.push(r"..\otherdir");
+/// path.push("system32");
+///
+/// The behaviour of `PathBuf` may be changed to a panic on such inputs
+/// in the future. The [`extend`] method should be used to add multi-part paths.
 #[cfg_attr(not(test), rustc_diagnostic_item = "PathBuf")]
 #[stable(feature = "rust1", since = "1.0.0")]
 pub struct PathBuf {
@@ -1391,6 +1406,9 @@ impl PathBuf {
     /// `file_name`. The new path will be a sibling of the original path.
     /// (That is, it will have the same parent.)
     ///
+    /// The argument is not sanitized, so can include separators. This
+    /// behaviour may be changed to a panic in the future.
+    ///
     /// [`self.file_name`]: Path::file_name
     /// [`pop`]: PathBuf::pop
     ///
@@ -1411,6 +1429,12 @@ impl PathBuf {
     ///
     /// buf.set_file_name("baz");
     /// assert!(buf == PathBuf::from("/baz"));
+    ///
+    /// buf.set_file_name("../b/c.txt");
+    /// assert!(buf == PathBuf::from("/../b/c.txt"));
+    ///
+    /// buf.set_file_name("baz");
+    /// assert!(buf == PathBuf::from("/../b/baz"));
     /// ```
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn set_file_name<S: AsRef<OsStr>>(&mut self, file_name: S) {