From 56d45282eaaae9f193dd00c093d59dacfa97c211 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Thu, 5 Dec 2024 23:30:17 -0700 Subject: [PATCH] LibWeb/WebGL: Don't crash on unknown getParameter on the context And allow the implementation to set the error code. --- Libraries/LibWeb/WebGL/WebGL2RenderingContext.h | 2 +- Libraries/LibWeb/WebGL/WebGLRenderingContext.h | 2 +- .../CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Libraries/LibWeb/WebGL/WebGL2RenderingContext.h b/Libraries/LibWeb/WebGL/WebGL2RenderingContext.h index ccff8b9b04c..d60f7ec6dbf 100644 --- a/Libraries/LibWeb/WebGL/WebGL2RenderingContext.h +++ b/Libraries/LibWeb/WebGL/WebGL2RenderingContext.h @@ -73,7 +73,7 @@ private: GLenum m_error { 0 }; - void set_error(GLenum error); + virtual void set_error(GLenum error) override; }; } diff --git a/Libraries/LibWeb/WebGL/WebGLRenderingContext.h b/Libraries/LibWeb/WebGL/WebGLRenderingContext.h index da20dadde61..65b652201d7 100644 --- a/Libraries/LibWeb/WebGL/WebGLRenderingContext.h +++ b/Libraries/LibWeb/WebGL/WebGLRenderingContext.h @@ -72,7 +72,7 @@ private: GLenum m_error { 0 }; - void set_error(GLenum error); + virtual void set_error(GLenum error) override; }; void fire_webgl_context_event(HTML::HTMLCanvasElement& canvas_element, FlyString const& type); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp index 4bf8e02a3ed..17d5f6123c5 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp @@ -231,7 +231,9 @@ static void generate_get_parameter(SourceGenerator& generator) generator.appendln(R"~~~( default: - TODO(); + dbgln("Unknown WebGL parameter name: {:x}", pname); + set_error(GL_INVALID_ENUM); + return JS::js_null(); })~~~"); } @@ -389,6 +391,7 @@ public: virtual void present() = 0; virtual void needs_to_present() = 0; + virtual void set_error(GLenum) = 0; )~~~"); for (auto const& function : interface.functions) {