File tree Expand file tree Collapse file tree 1 file changed +9
-1
lines changed Expand file tree Collapse file tree 1 file changed +9
-1
lines changed Original file line number Diff line number Diff line change @@ -174,7 +174,13 @@ macro_rules! _cssparser_internal__max_len {
174
174
struct Dummy ;
175
175
176
176
// MAX_LENGTH is generated by cssparser__match_ignore_ascii_case__max_len
177
- let mut buffer: [ u8 ; MAX_LENGTH ] = unsafe { :: std:: mem:: uninitialized( ) } ;
177
+ let mut buffer: [ u8 ; MAX_LENGTH ] =
178
+ // `buffer` is only used in `_match_ignore_ascii_case__to_lowercase`,
179
+ // which initializes with `copy_from_slice` the part of the buffer it uses,
180
+ // before it uses it.
181
+ unsafe {
182
+ :: std:: mem:: uninitialized( )
183
+ } ;
178
184
let $output = $crate:: _match_ignore_ascii_case__to_lowercase( & mut buffer, $input) ;
179
185
}
180
186
}
@@ -188,6 +194,8 @@ pub fn _match_ignore_ascii_case__to_lowercase<'a>(buffer: &'a mut [u8], input: &
188
194
if let Some ( first_uppercase) = input. bytes ( ) . position ( |byte| matches ! ( byte, b'A' ...b'Z' ) ) {
189
195
buffer. copy_from_slice ( input. as_bytes ( ) ) ;
190
196
std:: ascii:: AsciiExt :: make_ascii_lowercase ( & mut buffer[ first_uppercase..] ) ;
197
+ // `buffer` was initialized to a copy of `input` (which is &str so well-formed UTF-8)
198
+ // then lowercased (which preserves UTF-8 well-formedness)
191
199
unsafe {
192
200
Some ( :: std:: str:: from_utf8_unchecked ( buffer) )
193
201
}
You can’t perform that action at this time.
0 commit comments