From cc55e2e42660a655d53de9c3bacb782b8e716a2c Mon Sep 17 00:00:00 2001 From: Hyowon Kim Date: Thu, 18 Jun 2015 09:04:49 +0900 Subject: Check invalid values for the shadow attributes. --- components/script/dom/canvasrenderingcontext2d.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'components/script/dom/canvasrenderingcontext2d.rs') diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 9ac3a97c55b..06c3df97df1 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -1136,6 +1136,9 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsetx fn SetShadowOffsetX(self, value: f64) { + if !value.is_finite() || value == self.state.borrow().shadow_offset_x { + return; + } self.state.borrow_mut().shadow_offset_x = value; self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowOffsetX(value))).unwrap() } @@ -1147,6 +1150,9 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsety fn SetShadowOffsetY(self, value: f64) { + if !value.is_finite() || value == self.state.borrow().shadow_offset_y { + return; + } self.state.borrow_mut().shadow_offset_y = value; self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowOffsetY(value))).unwrap() } @@ -1158,6 +1164,9 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowblur fn SetShadowBlur(self, value: f64) { + if !value.is_finite() || value < 0f64 || value == self.state.borrow().shadow_blur { + return; + } self.state.borrow_mut().shadow_blur = value; self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowBlur(value))).unwrap() } @@ -1185,8 +1194,12 @@ impl Drop for CanvasRenderingContext2D { } pub fn parse_color(string: &str) -> Result { - match CSSColor::parse(&mut Parser::new(&string)) { - Ok(CSSColor::RGBA(rgba)) => Ok(rgba), + let mut parser = Parser::new(&string); + match CSSColor::parse(&mut parser) { + Ok(CSSColor::RGBA(rgba)) => { + if parser.is_exhausted() { Ok(rgba) } + else { Err(()) } + }, _ => Err(()), } } -- cgit v1.2.3