@@ -118,6 +118,21 @@ use smallvec::{smallvec, SmallVec};
118118use std:: { borrow:: Cow , collections:: hash_map:: Entry , fs, io:: Write } ;
119119pub use url:: { ParseError , Url } ;
120120
121+ /// Replace double quotes in property values.
122+ ///
123+ /// This implementation is deliberately simplistic and covers only `font-family`, but escaping
124+ /// might be needed in other properties that accept strings.
125+ macro_rules! replace_double_quotes {
126+ ( $target: expr, $name: expr, $value: expr) => {
127+ // Avoid allocation if there is no double quote in the input string
128+ if $name. starts_with( "font-family" ) && memchr:: memchr( b'"' , $value. as_bytes( ) ) . is_some( ) {
129+ $target. push_str( & $value. replace( '"' , "\' " ) )
130+ } else {
131+ $target. push_str( $value)
132+ } ;
133+ } ;
134+ }
135+
121136/// Configuration options for CSS inlining process.
122137#[ derive( Debug ) ]
123138pub struct InlineOptions < ' a > {
@@ -352,7 +367,7 @@ impl<'a> CSSInliner<'a> {
352367 for ( name, ( _, value) ) in styles {
353368 final_styles. push_str ( name. as_str ( ) ) ;
354369 final_styles. push ( ':' ) ;
355- final_styles . push_str ( value. as_str ( ) ) ;
370+ replace_double_quotes ! ( final_styles , name , & value) ;
356371 final_styles. push ( ';' ) ;
357372 }
358373 attributes. insert ( "style" , final_styles) ;
@@ -472,7 +487,7 @@ fn merge_styles(
472487 let ( name, value) = declaration?;
473488 final_styles. push_str ( & name) ;
474489 final_styles. push ( ':' ) ;
475- final_styles . push_str ( value) ;
490+ replace_double_quotes ! ( final_styles , name , value) ;
476491 final_styles. push ( ';' ) ;
477492 // This property won't be taken from new styles
478493 buffer. push ( name. to_string ( ) )
@@ -481,7 +496,7 @@ fn merge_styles(
481496 if !buffer. contains ( property) {
482497 final_styles. push_str ( property) ;
483498 final_styles. push ( ':' ) ;
484- final_styles . push_str ( value) ;
499+ replace_double_quotes ! ( final_styles , property , value) ;
485500 final_styles. push ( ';' ) ;
486501 }
487502 }
0 commit comments