From a37b5cb326146ddb594853587410a9f9fcc4a307 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Mon, 28 Jul 2014 11:41:16 +1000 Subject: [PATCH] Fix parsing invalid url, clean up font template matching. --- src/components/gfx/font_template.rs | 43 ++++++++++++++--------------- src/components/style/font_face.rs | 4 +-- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/components/gfx/font_template.rs b/src/components/gfx/font_template.rs index 602d70cff04..3f4916b69c5 100644 --- a/src/components/gfx/font_template.rs +++ b/src/components/gfx/font_template.rs @@ -97,34 +97,31 @@ impl FontTemplate { } }, None => { - match self.is_valid { - true => { - let data = self.get_data(); - let handle: Result = FontHandleMethods::new_from_template(fctx, data.clone(), None); - match handle { - Ok(handle) => { - let actual_desc = FontTemplateDescriptor::new(handle.boldness(), - handle.is_italic()); - let desc_match = actual_desc == *requested_desc; + if self.is_valid { + let data = self.get_data(); + let handle: Result = FontHandleMethods::new_from_template(fctx, data.clone(), None); + match handle { + Ok(handle) => { + let actual_desc = FontTemplateDescriptor::new(handle.boldness(), + handle.is_italic()); + let desc_match = actual_desc == *requested_desc; - self.descriptor = Some(actual_desc); - self.is_valid = true; - if desc_match { - Some(data) - } else { - None - } - } - Err(()) => { - self.is_valid = false; - debug!("Unable to create a font from template {}", self.identifier); + self.descriptor = Some(actual_desc); + self.is_valid = true; + if desc_match { + Some(data) + } else { None } } - }, - false => { - None + Err(()) => { + self.is_valid = false; + debug!("Unable to create a font from template {}", self.identifier); + None + } } + } else { + None } } } diff --git a/src/components/style/font_face.rs b/src/components/style/font_face.rs index 069d232b354..228c5d459ae 100644 --- a/src/components/style/font_face.rs +++ b/src/components/style/font_face.rs @@ -79,8 +79,8 @@ pub fn parse_font_face_rule(rule: AtRule, parent_rules: &mut Vec, base_ // url() or local() should be next let maybe_url = match iter.next() { Some(&URL(ref string_value)) => { - // FIXME: handle URL parse errors more gracefully. - let url = UrlParser::new().base_url(base_url).parse(string_value.as_slice()).unwrap(); + let maybe_url = UrlParser::new().base_url(base_url).parse(string_value.as_slice()); + let url = maybe_url.unwrap_or_else(|_| Url::parse("about:invalid").unwrap()); Some(url) }, Some(&Function(ref string_value, ref _values)) => {