Eliminate an unreachable codepath from String::from_utf8_lossy
Utf8Lossy's Iterator implementation ensures that only the final chunk has an empty slice for broken. Thus the only way the first chunk could have an empty broken is if it is the final chunk, i.e. there is only one chunk total. And the only way that there could be one chunk total is if the whole input is valid utf8 and non-empty. That condition has already been handled by an early return, so at the point that the first REPLACEMENT is being pushed, it's impossible for first_broken to be empty.
This commit is contained in:
parent
dd549dcab4
commit
9125dd74bd
|
@ -558,13 +558,13 @@ impl String {
|
|||
pub fn from_utf8_lossy(v: &[u8]) -> Cow<'_, str> {
|
||||
let mut iter = lossy::Utf8Lossy::from_bytes(v).chunks();
|
||||
|
||||
let (first_valid, first_broken) = if let Some(chunk) = iter.next() {
|
||||
let first_valid = if let Some(chunk) = iter.next() {
|
||||
let lossy::Utf8LossyChunk { valid, broken } = chunk;
|
||||
if valid.len() == v.len() {
|
||||
debug_assert!(broken.is_empty());
|
||||
if broken.is_empty() {
|
||||
debug_assert_eq!(valid.len(), v.len());
|
||||
return Cow::Borrowed(valid);
|
||||
}
|
||||
(valid, broken)
|
||||
valid
|
||||
} else {
|
||||
return Cow::Borrowed("");
|
||||
};
|
||||
|
@ -573,9 +573,7 @@ impl String {
|
|||
|
||||
let mut res = String::with_capacity(v.len());
|
||||
res.push_str(first_valid);
|
||||
if !first_broken.is_empty() {
|
||||
res.push_str(REPLACEMENT);
|
||||
}
|
||||
res.push_str(REPLACEMENT);
|
||||
|
||||
for lossy::Utf8LossyChunk { valid, broken } in iter {
|
||||
res.push_str(valid);
|
||||
|
|
Loading…
Reference in a new issue