@@ -95,7 +95,9 @@ fn detect_meta_charset(html: &str) -> Option<&'static Encoding> {
9595 ( & inner[ ..end] , & inner[ end..] )
9696 } else {
9797 let end = rest
98- . find ( |c : char | c. is_ascii_whitespace ( ) || c == '"' || c == '\'' || c == ';' || c == '>' )
98+ . find ( |c : char | {
99+ c. is_ascii_whitespace ( ) || c == '"' || c == '\'' || c == ';' || c == '>'
100+ } )
99101 . unwrap_or ( rest. len ( ) ) ;
100102 ( & rest[ ..end] , & rest[ end..] )
101103 } ;
@@ -266,10 +268,7 @@ fn is_stylesheet_link(tag_content: &str) -> bool {
266268 false
267269}
268270
269- fn advance_past (
270- chars : & mut std:: iter:: Peekable < std:: str:: CharIndices < ' _ > > ,
271- target : usize ,
272- ) {
271+ fn advance_past ( chars : & mut std:: iter:: Peekable < std:: str:: CharIndices < ' _ > > , target : usize ) {
273272 while let Some ( & ( j, _) ) = chars. peek ( ) {
274273 if j >= target {
275274 break ;
@@ -305,7 +304,10 @@ fn skip_until_close_tag(
305304 }
306305 } else if rest. starts_with ( & open_pattern) {
307306 let after = & rest[ open_pattern. len ( ) ..] ;
308- if after. starts_with ( '>' ) || after. starts_with ( char:: is_whitespace) || after. starts_with ( '/' ) {
307+ if after. starts_with ( '>' )
308+ || after. starts_with ( char:: is_whitespace)
309+ || after. starts_with ( '/' )
310+ {
309311 depth += 1 ;
310312 }
311313 }
@@ -332,7 +334,8 @@ fn strip_event_handlers(tag: &str) -> String {
332334 j += 1 ;
333335 }
334336 // Skip tag name
335- while j < bytes. len ( ) && !bytes[ j] . is_ascii_whitespace ( ) && bytes[ j] != b'>' && bytes[ j] != b'/' {
337+ while j < bytes. len ( ) && !bytes[ j] . is_ascii_whitespace ( ) && bytes[ j] != b'>' && bytes[ j] != b'/'
338+ {
336339 j += 1 ;
337340 }
338341
@@ -353,7 +356,12 @@ fn strip_event_handlers(tag: &str) -> String {
353356
354357 // Read attribute name
355358 let attr_start = i;
356- while i < bytes. len ( ) && bytes[ i] != b'=' && !bytes[ i] . is_ascii_whitespace ( ) && bytes[ i] != b'>' && bytes[ i] != b'/' {
359+ while i < bytes. len ( )
360+ && bytes[ i] != b'='
361+ && !bytes[ i] . is_ascii_whitespace ( )
362+ && bytes[ i] != b'>'
363+ && bytes[ i] != b'/'
364+ {
357365 i += 1 ;
358366 }
359367 let attr_name = & tag[ attr_start..i] ;
@@ -393,7 +401,10 @@ fn strip_event_handlers(tag: &str) -> String {
393401 }
394402 } else {
395403 // Unquoted value
396- while temp < bytes. len ( ) && !bytes[ temp] . is_ascii_whitespace ( ) && bytes[ temp] != b'>' {
404+ while temp < bytes. len ( )
405+ && !bytes[ temp] . is_ascii_whitespace ( )
406+ && bytes[ temp] != b'>'
407+ {
397408 temp += 1 ;
398409 }
399410 }
@@ -453,10 +464,7 @@ fn percent_decode(input: &str) -> Vec<u8> {
453464 let mut i = 0 ;
454465 while i < bytes. len ( ) {
455466 if bytes[ i] == b'%' && i + 2 < bytes. len ( ) {
456- if let ( Some ( hi) , Some ( lo) ) = (
457- hex_val ( bytes[ i + 1 ] ) ,
458- hex_val ( bytes[ i + 2 ] ) ,
459- ) {
467+ if let ( Some ( hi) , Some ( lo) ) = ( hex_val ( bytes[ i + 1 ] ) , hex_val ( bytes[ i + 2 ] ) ) {
460468 result. push ( hi << 4 | lo) ;
461469 i += 3 ;
462470 continue ;
@@ -547,13 +555,23 @@ fn preprocess_body_bgcolor(html: &str) -> String {
547555 let ( value, attr_end_offset) = if rest. starts_with ( '"' ) {
548556 let inner = & rest[ 1 ..] ;
549557 let end = inner. find ( '"' ) . unwrap_or ( inner. len ( ) ) ;
550- ( & tag[ bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 ..bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 + end] , end + 2 )
558+ (
559+ & tag[ bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1
560+ ..bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 + end] ,
561+ end + 2 ,
562+ )
551563 } else if rest. starts_with ( '\'' ) {
552564 let inner = & rest[ 1 ..] ;
553565 let end = inner. find ( '\'' ) . unwrap_or ( inner. len ( ) ) ;
554- ( & tag[ bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 ..bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 + end] , end + 2 )
566+ (
567+ & tag[ bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1
568+ ..bg_pos + 7 + ( tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ) + 1 + end] ,
569+ end + 2 ,
570+ )
555571 } else {
556- let end = rest. find ( |c : char | c. is_ascii_whitespace ( ) || c == '>' ) . unwrap_or ( rest. len ( ) ) ;
572+ let end = rest
573+ . find ( |c : char | c. is_ascii_whitespace ( ) || c == '>' )
574+ . unwrap_or ( rest. len ( ) ) ;
557575 let offset = tag_lower. len ( ) - bg_pos - 7 - rest. len ( ) ;
558576 ( & tag[ bg_pos + 7 + offset..bg_pos + 7 + offset + end] , end)
559577 } ;
@@ -660,15 +678,28 @@ fn preprocess_cellpadding(html: &str) -> String {
660678 let ( value, _val_len) = if rest. starts_with ( '"' ) {
661679 let inner = & rest[ 1 ..] ;
662680 let end = inner. find ( '"' ) . unwrap_or ( inner. len ( ) ) ;
663- ( & html[ abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 ..abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 + end] , end + 2 )
681+ (
682+ & html[ abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1
683+ ..abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 + end] ,
684+ end + 2 ,
685+ )
664686 } else if rest. starts_with ( '\'' ) {
665687 let inner = & rest[ 1 ..] ;
666688 let end = inner. find ( '\'' ) . unwrap_or ( inner. len ( ) ) ;
667- ( & html[ abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 ..abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 + end] , end + 2 )
689+ (
690+ & html[ abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1
691+ ..abs_pos + 11 + ( lower. len ( ) - abs_pos - 11 - rest. len ( ) ) + 1 + end] ,
692+ end + 2 ,
693+ )
668694 } else {
669- let end = rest. find ( |c : char | c. is_ascii_whitespace ( ) || c == '>' ) . unwrap_or ( rest. len ( ) ) ;
695+ let end = rest
696+ . find ( |c : char | c. is_ascii_whitespace ( ) || c == '>' )
697+ . unwrap_or ( rest. len ( ) ) ;
670698 let offset = lower. len ( ) - abs_pos - 11 - rest. len ( ) ;
671- ( & html[ abs_pos + 11 + offset..abs_pos + 11 + offset + end] , end)
699+ (
700+ & html[ abs_pos + 11 + offset..abs_pos + 11 + offset + end] ,
701+ end,
702+ )
672703 } ;
673704
674705 let padding = value. trim ( ) ;
@@ -705,7 +736,8 @@ fn preprocess_cellpadding(html: &str) -> String {
705736 }
706737 attr_end += 1 ;
707738 } else {
708- while attr_end < tb. len ( ) && !tb[ attr_end] . is_ascii_whitespace ( ) && tb[ attr_end] != b'>' {
739+ while attr_end < tb. len ( ) && !tb[ attr_end] . is_ascii_whitespace ( ) && tb[ attr_end] != b'>'
740+ {
709741 attr_end += 1 ;
710742 }
711743 }
@@ -914,7 +946,8 @@ mod tests {
914946
915947 #[ test]
916948 fn sanitize_strips_form_elements ( ) {
917- let html = "<form action=\" /submit\" ><input type=\" text\" ><button>Go</button></form><p>After</p>" ;
949+ let html =
950+ "<form action=\" /submit\" ><input type=\" text\" ><button>Go</button></form><p>After</p>" ;
918951 let result = sanitize_html ( html) ;
919952 assert ! ( !result. contains( "form" ) ) ;
920953 assert ! ( !result. contains( "input" ) ) ;
@@ -1060,7 +1093,9 @@ mod tests {
10601093 #[ test]
10611094 fn prepare_email_with_encoding ( ) {
10621095 // Windows-1252 encoded with meta charset
1063- let html = b"<html><head><meta charset=\" windows-1252\" ></head><body>\x93 Hello\x94 </body></html>" . to_vec ( ) ;
1096+ let html =
1097+ b"<html><head><meta charset=\" windows-1252\" ></head><body>\x93 Hello\x94 </body></html>"
1098+ . to_vec ( ) ;
10641099 let prepared = prepare_email_html ( & html, None , None ) ;
10651100 assert ! ( prepared. html. contains( '\u{201c}' ) ) ;
10661101 assert ! ( prepared. html. contains( '\u{201d}' ) ) ;
0 commit comments