diff --git a/src/html.rs b/src/html.rs index 3ac5fef..30e3355 100644 --- a/src/html.rs +++ b/src/html.rs @@ -104,7 +104,7 @@ pub fn walk_and_embed_assets( let mut link_type = LinkType::Unknown; for attr in attrs_mut.iter_mut() { if &attr.name.local == "rel" { - let value = attr.value.as_ref(); + let value = attr.value.trim(); if is_icon(value) { link_type = LinkType::Icon; break; @@ -233,7 +233,7 @@ pub fn walk_and_embed_assets( } else if let Some((dataurl, _)) = (&found_datasrc) .into_iter() .chain(&found_src) // Give dataurl priority - .map(|attr| &attr.value) + .map(|attr| attr.value.trim()) .filter(|src| !src.is_empty()) // Ignore empty srcs .next() .and_then(|src| resolve_url(&url, src).ok()) // Make absolute @@ -259,7 +259,7 @@ pub fn walk_and_embed_assets( let attr_name: &str = &attr.name.local; if attr_name == "src" { - let src_full_url = resolve_url(&url, attr.value.as_ref()) + let src_full_url = resolve_url(&url, attr.value.trim()) .unwrap_or_else(|_| attr.value.to_string()); attr.value.clear(); attr.value.push_slice(src_full_url.as_str()); @@ -270,7 +270,7 @@ pub fn walk_and_embed_assets( attr.value.push_slice(TRANSPARENT_PIXEL); } else { let srcset_full_url = - resolve_url(&url, attr.value.as_ref()).unwrap_or_default(); + resolve_url(&url, attr.value.trim()).unwrap_or_default(); let (source_dataurl, _) = retrieve_asset( cache, client, @@ -290,13 +290,13 @@ pub fn walk_and_embed_assets( "a" => { for attr in attrs_mut.iter_mut() { if &attr.name.local == "href" { + let attr_value = attr.value.trim(); // Don't touch email links or hrefs which begin with a hash sign - if attr.value.starts_with('#') || url_has_protocol(&attr.value) { + if attr_value.starts_with('#') || url_has_protocol(attr_value) { continue; } - let href_full_url = - resolve_url(&url, attr.value.as_ref()).unwrap_or_default(); + let href_full_url = resolve_url(&url, attr_value).unwrap_or_default(); attr.value.clear(); attr.value.push_slice(href_full_url.as_str()); } @@ -326,7 +326,7 @@ pub fn walk_and_embed_assets( for attr in attrs_mut.iter_mut() { if &attr.name.local == "src" { let src_full_url = - resolve_url(&url, attr.value.as_ref()).unwrap_or_default(); + resolve_url(&url, attr.value.trim()).unwrap_or_default(); let (js_dataurl, _) = retrieve_asset( cache, client, @@ -368,10 +368,11 @@ pub fn walk_and_embed_assets( "form" => { for attr in attrs_mut.iter_mut() { if &attr.name.local == "action" { + let attr_value = attr.value.trim(); // Modify action to be a full URL - if !is_valid_url(&attr.value) { + if !is_valid_url(attr_value) { let href_full_url = - resolve_url(&url, attr.value.as_ref()).unwrap_or_default(); + resolve_url(&url, attr_value).unwrap_or_default(); attr.value.clear(); attr.value.push_slice(href_full_url.as_str()); } @@ -387,7 +388,7 @@ pub fn walk_and_embed_assets( continue; } - let iframe_src = attr.value.as_ref(); + let iframe_src = attr.value.trim(); // Ignore iframes with empty source (they cause infinite loops) if iframe_src.is_empty() { @@ -427,7 +428,7 @@ pub fn walk_and_embed_assets( "video" => { for attr in attrs_mut.iter_mut() { if &attr.name.local == "poster" { - let video_poster = attr.value.as_ref(); + let video_poster = attr.value.trim(); // Skip posters with empty source if video_poster.is_empty() {