From a6359fe587aa5ed55aee8bb1b7a4a2c4138ec6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1ty=C3=A1s=20Mustoha?= Date: Mon, 16 Mar 2020 13:06:02 +0100 Subject: [PATCH] Do not try to read pixels from an FBO without read buffer Adds another check to the WebGL2 ReadPixels implementation to fix an OpenGL invalid operation crash when the method is called on a bound framebuffer that has no read buffer. --- components/script/dom/webgl2renderingcontext.rs | 6 +++++- .../meta/conformance2/renderbuffers/readbuffer.html.ini | 6 ------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index c0c3aab5ad6b..7b1a68b475ab 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -349,7 +349,11 @@ impl WebGL2RenderingContext { } let fb_slot = self.base.get_draw_framebuffer_slot(); - if fb_slot.get().is_none() && self.default_fb_readbuffer.get() == constants::NONE { + let fb_readbuffer_valid = match fb_slot.get() { + Some(fb) => fb.attachment(fb.read_buffer()).is_some(), + None => self.default_fb_readbuffer.get() != constants::NONE, + }; + if !fb_readbuffer_valid { return self.base.webgl_error(InvalidOperation); } diff --git a/tests/wpt/webgl/meta/conformance2/renderbuffers/readbuffer.html.ini b/tests/wpt/webgl/meta/conformance2/renderbuffers/readbuffer.html.ini index 232dfdd8524d..df42b4866c94 100644 --- a/tests/wpt/webgl/meta/conformance2/renderbuffers/readbuffer.html.ini +++ b/tests/wpt/webgl/meta/conformance2/renderbuffers/readbuffer.html.ini @@ -1,8 +1,2 @@ [readbuffer.html] expected: TIMEOUT - [WebGL test #3: gl.getParameter(gl.READ_BUFFER) should be 1029 (of type number). Was null (of type object).] - expected: FAIL - - [WebGL test #4: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] - expected: FAIL -