Prevent String::retain from creating non-utf8 strings when abusing panic

This commit is contained in:
Giacomo Stevanato 2020-10-28 18:52:45 +01:00
parent 1d6a0b0c72
commit e83666f45e

View File

@ -1235,6 +1235,10 @@ impl String {
let mut del_bytes = 0; let mut del_bytes = 0;
let mut idx = 0; let mut idx = 0;
unsafe {
self.vec.set_len(0);
}
while idx < len { while idx < len {
let ch = unsafe { self.get_unchecked(idx..len).chars().next().unwrap() }; let ch = unsafe { self.get_unchecked(idx..len).chars().next().unwrap() };
let ch_len = ch.len_utf8(); let ch_len = ch.len_utf8();
@ -1255,12 +1259,10 @@ impl String {
idx += ch_len; idx += ch_len;
} }
if del_bytes > 0 {
unsafe { unsafe {
self.vec.set_len(len - del_bytes); self.vec.set_len(len - del_bytes);
} }
} }
}
/// Inserts a character into this `String` at a byte position. /// Inserts a character into this `String` at a byte position.
/// ///