aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-08-21 23:43:05 -0700
committerEric Anholt <eric@anholt.net>2016-08-26 12:58:51 -0700
commitb8b74e4b37dd9488ddef6362098aa45b5d6d3a3c (patch)
treec2ba01e5288b2f3917e03703a036d3ef74e8f759 /components/script/dom
parent545ae86dff6513f1f5de083ba3ce64b181368482 (diff)
downloadservo-b8b74e4b37dd9488ddef6362098aa45b5d6d3a3c.tar.gz
servo-b8b74e4b37dd9488ddef6362098aa45b5d6d3a3c.zip
webgl: Do validation of glScissor/glViewport(width, height) on the DOM side.
Avoids testcase CRASHes due to unexpected GL errors.
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/webglrenderingcontext.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 059c6941bc1..b09d768fea0 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -1481,6 +1481,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.4
fn Scissor(&self, x: i32, y: i32, width: i32, height: i32) {
+ if width < 0 || height < 0 {
+ return self.webgl_error(InvalidValue)
+ }
+
self.ipc_renderer
.send(CanvasMsg::WebGL(WebGLCommand::Scissor(x, y, width, height)))
.unwrap()
@@ -1893,6 +1897,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.4
fn Viewport(&self, x: i32, y: i32, width: i32, height: i32) {
+ if width < 0 || height < 0 {
+ return self.webgl_error(InvalidValue)
+ }
+
self.ipc_renderer
.send(CanvasMsg::WebGL(WebGLCommand::Viewport(x, y, width, height)))
.unwrap()