Skip to content

Commit

Permalink
Rollup merge of #126305 - workingjubilee:fix-os-string-to-string-utf8…
Browse files Browse the repository at this point in the history
…-invariant, r=joboet

Make PathBuf less Ok with adding UTF-16 then `into_string`

Fixes #126291 which is, as far as I can tell, a regression introduced by #96869.

try-job: x86_64-msvc
  • Loading branch information
workingjubilee authored Jun 12, 2024
2 parents 36e828f + af04418 commit 3862f01
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
3 changes: 3 additions & 0 deletions library/std/src/sys_common/wtf8.rs
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,9 @@ impl Wtf8Buf {
/// Part of a hack to make PathBuf::push/pop more efficient.
#[inline]
pub(crate) fn as_mut_vec_for_path_buf(&mut self) -> &mut Vec<u8> {
// FIXME: this function should not even exist, as it implies violating Wtf8Buf invariants
// For now, simply assume that is about to happen.
self.is_known_utf8 = false;
&mut self.bytes
}
}
Expand Down
14 changes: 14 additions & 0 deletions library/std/tests/windows.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#![cfg(windows)]
//! An external tests
use std::{ffi::OsString, os::windows::ffi::OsStringExt, path::PathBuf};

#[test]
#[should_panic]
fn os_string_must_know_it_isnt_utf8_issue_126291() {
let mut utf8 = PathBuf::from(OsString::from("utf8".to_owned()));
let non_utf8: OsString =
OsStringExt::from_wide(&[0x6e, 0x6f, 0x6e, 0xd800, 0x75, 0x74, 0x66, 0x38]);
utf8.set_extension(&non_utf8);
utf8.into_os_string().into_string().unwrap();
}

0 comments on commit 3862f01

Please sign in to comment.