Skip to content

Commit

Permalink
Merge pull request #5281 from Manishearth/safety-docs
Browse files Browse the repository at this point in the history
Correct safety docs
  • Loading branch information
epage committed Jan 3, 2024
2 parents 48d28aa + ddae7e6 commit 5c31f45
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 1 deletion.
3 changes: 3 additions & 0 deletions clap_lex/src/ext.rs
Expand Up @@ -2,6 +2,9 @@ use std::ffi::OsStr;

pub trait OsStrExt: private::Sealed {
/// Converts to a string slice.
///
/// The Utf8Error is guaranteed to have a valid UTF8 boundary
/// in its `valid_up_to()`
fn try_str(&self) -> Result<&str, std::str::Utf8Error>;
/// Returns `true` if the given pattern matches a sub-slice of
/// this string slice.
Expand Down
3 changes: 2 additions & 1 deletion clap_lex/src/lib.rs
Expand Up @@ -463,7 +463,8 @@ fn split_nonutf8_once(b: &OsStr) -> (&str, Option<&OsStr>) {
match b.try_str() {
Ok(s) => (s, None),
Err(err) => {
// SAFETY: `char_indices` ensures `index` is at a valid UTF-8 boundary
// SAFETY: `err.valid_up_to()`, which came from str::from_utf8(), is guaranteed
// to be a valid UTF8 boundary
let (valid, after_valid) = unsafe { ext::split_at(b, err.valid_up_to()) };
let valid = valid.try_str().unwrap();
(valid, Some(after_valid))
Expand Down

0 comments on commit 5c31f45

Please sign in to comment.