aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-08-13 23:46:25 -0700
committerEric Anholt <eric@anholt.net>2016-11-05 11:49:30 -0700
commit9a10666941ea4bbec03205609d1b578a749251c6 (patch)
tree5f4e09b35147aeb8c97ca4564394bb6d93c8f81c /components/script/dom/webglrenderingcontext.rs
parent3277c5281cf7d4345d8c0eb11a8f451a5796eb3e (diff)
downloadservo-9a10666941ea4bbec03205609d1b578a749251c6.tar.gz
servo-9a10666941ea4bbec03205609d1b578a749251c6.zip
webgl: Throw an error on readPixels(width < 0 || height < 0)
Otherwise gleam will try to allocate a negative size area for the result, and we'll panic with oom.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 24bbb1a9dbb..781b95c60bf 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -1777,6 +1777,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
_ => return Ok(self.webgl_error(InvalidOperation)),
}
+ if width < 0 || height < 0 {
+ return Ok(self.webgl_error(InvalidValue));
+ }
+
let (sender, receiver) = ipc::channel().unwrap();
self.ipc_renderer
.send(CanvasMsg::WebGL(WebGLCommand::ReadPixels(x, y, width, height, format, pixel_type, sender)))