Rollup merge of #126980 - Borgerr:fix-extendfromslice-check, r=workin… · model-checking/verify-rust-std@6c38c60 (original) (raw)

Skip to content

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

Commit 6c38c60

File tree

2 files changed

lines changed

2 files changed

lines changed

Lines changed: 1 addition & 1 deletion

Original file line number Diff line number Diff line change
@@ -480,7 +480,7 @@ impl Wtf8Buf {
480 480 #[inline]
481 481 pub(crate) fn extend_from_slice(&mut self, other: &[u8]) {
482 482 self.bytes.extend_from_slice(other);
483 -self.is_known_utf8 = self.is_known_utf8 |
483 +self.is_known_utf8 = false;
484 484 }
485 485 }
486 486

Lines changed: 24 additions & 0 deletions

Original file line number Diff line number Diff line change
@@ -725,3 +725,27 @@ fn wtf8_utf8_boundary_between_surrogates() {
725 725 string.push(CodePoint::from_u32(0xD800).unwrap());
726 726 check_utf8_boundary(&string, 3);
727 727 }
728 +
729 +#[test]
730 +fn wobbled_wtf8_plus_bytes_isnt_utf8() {
731 +let mut string: Wtf8Buf = unsafe { Wtf8::from_bytes_unchecked(b"\xED\xA0\x80").to_owned() };
732 +assert!(!string.is_known_utf8);
733 + string.extend_from_slice(b"some utf-8");
734 +assert!(!string.is_known_utf8);
735 +}
736 +
737 +#[test]
738 +fn wobbled_wtf8_plus_str_isnt_utf8() {
739 +let mut string: Wtf8Buf = unsafe { Wtf8::from_bytes_unchecked(b"\xED\xA0\x80").to_owned() };
740 +assert!(!string.is_known_utf8);
741 + string.push_str("some utf-8");
742 +assert!(!string.is_known_utf8);
743 +}
744 +
745 +#[test]
746 +fn unwobbly_wtf8_plus_utf8_is_utf8() {
747 +let mut string: Wtf8Buf = Wtf8Buf::from_str("hello world");
748 +assert!(string.is_known_utf8);
749 + string.push_str("some utf-8");
750 +assert!(string.is_known_utf8);
751 +}