@@ -1153,6 +1153,21 @@ impl FusedIterator for Ancestors<'_> {}
1153
1153
/// ```
1154
1154
///
1155
1155
/// Which method works best depends on what kind of situation you're in.
1156
+ ///
1157
+ /// Note that `PathBuf`` does not always sanitize arguments, for example
1158
+ /// [`push`] allows paths built from strings which include separators:
1159
+ ///
1160
+ /// use std::path::PathBuf;
1161
+ ///
1162
+ /// let mut path = PathBuf::new();
1163
+ ///
1164
+ /// path.push(r"C:\");
1165
+ /// path.push("windows");
1166
+ /// path.push(r"..\otherdir");
1167
+ /// path.push("system32");
1168
+ ///
1169
+ /// The behaviour of `PathBuf` may be changed to a panic on such inputs
1170
+ /// in the future. The [`extend`] method should be used to add multi-part paths.
1156
1171
#[ cfg_attr( not( test) , rustc_diagnostic_item = "PathBuf" ) ]
1157
1172
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1158
1173
pub struct PathBuf {
@@ -1391,6 +1406,9 @@ impl PathBuf {
1391
1406
/// `file_name`. The new path will be a sibling of the original path.
1392
1407
/// (That is, it will have the same parent.)
1393
1408
///
1409
+ /// The argument is not sanitized, so can include separators. This
1410
+ /// behaviour may be changed to a panic in the future.
1411
+ ///
1394
1412
/// [`self.file_name`]: Path::file_name
1395
1413
/// [`pop`]: PathBuf::pop
1396
1414
///
@@ -1411,6 +1429,12 @@ impl PathBuf {
1411
1429
///
1412
1430
/// buf.set_file_name("baz");
1413
1431
/// assert!(buf == PathBuf::from("/baz"));
1432
+ ///
1433
+ /// buf.set_file_name("../b/c.txt");
1434
+ /// assert!(buf == PathBuf::from("/../b/c.txt"));
1435
+ ///
1436
+ /// buf.set_file_name("baz");
1437
+ /// assert!(buf == PathBuf::from("/../b/baz"));
1414
1438
/// ```
1415
1439
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1416
1440
pub fn set_file_name < S : AsRef < OsStr > > ( & mut self , file_name : S ) {
0 commit comments