File tree Expand file tree Collapse file tree 3 files changed +29
-15
lines changed Expand file tree Collapse file tree 3 files changed +29
-15
lines changed Original file line number Diff line number Diff line change 4141#[ allow_internal_unstable( rustc_attrs, liballoc_internals) ]
4242macro_rules! vec {
4343 ( ) => (
44- $crate:: __rust_force_expr! ( $crate :: vec:: Vec :: new( ) )
44+ $crate:: vec:: Vec :: new( )
4545 ) ;
4646 ( $elem: expr; $n: expr) => (
47- $crate:: __rust_force_expr! ( $crate :: vec:: from_elem( $elem, $n) )
47+ $crate:: vec:: from_elem( $elem, $n)
4848 ) ;
4949 ( $( $x: expr) ,+ $( , ) ?) => (
50- $crate :: __rust_force_expr! ( <[ _] >:: into_vec(
50+ <[ _] >:: into_vec(
5151 // This rustc_box is not required, but it produces a dramatic improvement in compile
5252 // time when constructing arrays with many elements.
5353 #[ rustc_box]
5454 $crate:: boxed:: Box :: new( [ $( $x) ,+] )
55- ) )
55+ )
5656 ) ;
5757}
5858
@@ -126,13 +126,3 @@ macro_rules! format {
126126 res
127127 } }
128128}
129-
130- /// Force AST node to an expression to improve diagnostics in pattern position.
131- #[ doc( hidden) ]
132- #[ macro_export]
133- #[ unstable( feature = "liballoc_internals" , issue = "none" , reason = "implementation detail" ) ]
134- macro_rules! __rust_force_expr {
135- ( $e: expr) => {
136- $e
137- } ;
138- }
Original file line number Diff line number Diff line change @@ -480,7 +480,7 @@ impl Wtf8Buf {
480480 #[ inline]
481481 pub ( crate ) fn extend_from_slice ( & mut self , other : & [ u8 ] ) {
482482 self . bytes . extend_from_slice ( other) ;
483- self . is_known_utf8 = self . is_known_utf8 || self . next_surrogate ( 0 ) . is_none ( ) ;
483+ self . is_known_utf8 = false ;
484484 }
485485}
486486
Original file line number Diff line number Diff line change @@ -725,3 +725,27 @@ fn wtf8_utf8_boundary_between_surrogates() {
725725 string. push ( CodePoint :: from_u32 ( 0xD800 ) . unwrap ( ) ) ;
726726 check_utf8_boundary ( & string, 3 ) ;
727727}
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+ }
You can’t perform that action at this time.
0 commit comments