@@ -170,7 +170,8 @@ pub fn quote(in_bytes: &[u8]) -> Cow<[u8]> {
170
170
b"\" \" " [ ..] . into ( )
171
171
} else if in_bytes. iter ( ) . any ( |c| match * c as char {
172
172
'|' | '&' | ';' | '<' | '>' | '(' | ')' | '$' | '`' | '\\' | '"' | '\'' | ' ' | '\t' |
173
- '\r' | '\n' | '*' | '?' | '[' | '#' | '~' | '=' | '%' => true ,
173
+ '\r' | '\n' | '*' | '?' | '[' | '#' | '~' | '=' | '%' | '{' | '}' |
174
+ '\u{80}' ..= '\u{10ffff}' => true ,
174
175
_ => false
175
176
} ) {
176
177
let mut out: Vec < u8 > = Vec :: new ( ) ;
@@ -200,8 +201,11 @@ pub fn join<'a, I: core::iter::IntoIterator<Item = &'a [u8]>>(words: I) -> Vec<u
200
201
201
202
#[ cfg( test) ]
202
203
const INVALID_UTF8 : & [ u8 ] = b"\xa1 " ;
204
+ #[ cfg( test) ]
205
+ const INVALID_UTF8_DOUBLEQUOTED : & [ u8 ] = b"\" \xa1 \" " ;
203
206
204
207
#[ test]
208
+ #[ allow( invalid_from_utf8) ]
205
209
fn test_invalid_utf8 ( ) {
206
210
// Check that our test string is actually invalid UTF-8.
207
211
assert ! ( core:: str :: from_utf8( INVALID_UTF8 ) . is_err( ) ) ;
@@ -255,7 +259,7 @@ fn test_quote() {
255
259
assert_eq ! ( quote( b"foo bar" ) , & b"\" foo bar\" " [ ..] ) ;
256
260
assert_eq ! ( quote( b"\" " ) , & b"\" \\ \" \" " [ ..] ) ;
257
261
assert_eq ! ( quote( b"" ) , & b"\" \" " [ ..] ) ;
258
- assert_eq ! ( quote( INVALID_UTF8 ) , INVALID_UTF8 ) ;
262
+ assert_eq ! ( quote( INVALID_UTF8 ) , INVALID_UTF8_DOUBLEQUOTED ) ;
259
263
}
260
264
261
265
#[ test]
@@ -264,5 +268,5 @@ fn test_join() {
264
268
assert_eq ! ( join( vec![ & b"" [ ..] ] ) , & b"\" \" " [ ..] ) ;
265
269
assert_eq ! ( join( vec![ & b"a" [ ..] , & b"b" [ ..] ] ) , & b"a b" [ ..] ) ;
266
270
assert_eq ! ( join( vec![ & b"foo bar" [ ..] , & b"baz" [ ..] ] ) , & b"\" foo bar\" baz" [ ..] ) ;
267
- assert_eq ! ( join( vec![ INVALID_UTF8 ] ) , INVALID_UTF8 ) ;
271
+ assert_eq ! ( join( vec![ INVALID_UTF8 ] ) , INVALID_UTF8_DOUBLEQUOTED ) ;
268
272
}
0 commit comments