[Bf-blender-cvs] [15cfb375a39] master: Fix T89782: Segfault populating popup menu with dimensions above the opengl limit

Germano Cavalcante noreply at git.blender.org
Fri Jul 16 14:53:13 CEST 2021


Commit: 15cfb375a39b9d9e35e8c83942edb8f43788427f
Author: Germano Cavalcante
Date:   Wed Jul 14 20:38:18 2021 -0300
Branches: master
https://developer.blender.org/rB15cfb375a39b9d9e35e8c83942edb8f43788427f

Fix T89782: Segfault populating popup menu with dimensions above the opengl limit

The crash happens because `GPU_offscreen_create` is called with `err_out` `NULL`.

This patch proposes a solution within the `GPU_offscreen_create` itself
and raises an error report in the interface if a menu is called with
dimensions beyond what is supported.

Ref T89782

Maniphest Tasks: T89782

Differential Revision: https://developer.blender.org/D11927

===================================================================

M	source/blender/gpu/intern/gpu_framebuffer.cc
M	source/blender/windowmanager/intern/wm_draw.c

===================================================================

diff --git a/source/blender/gpu/intern/gpu_framebuffer.cc b/source/blender/gpu/intern/gpu_framebuffer.cc
index 1293cc0953d..4bb13d01c2d 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.cc
+++ b/source/blender/gpu/intern/gpu_framebuffer.cc
@@ -609,7 +609,13 @@ GPUOffScreen *GPU_offscreen_create(
   }
 
   if ((depth && !ofs->depth) || !ofs->color) {
-    BLI_snprintf(err_out, 256, "GPUTexture: Texture allocation failed.");
+    const char error[] = "GPUTexture: Texture allocation failed.";
+    if (err_out) {
+      BLI_snprintf(err_out, 256, error);
+    }
+    else {
+      fprintf(stderr, error);
+    }
     GPU_offscreen_free(ofs);
     return nullptr;
   }
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 0922aaaee53..f01e28f8822 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -457,6 +457,7 @@ static void wm_draw_region_buffer_create(ARegion *region, bool stereo, bool use_
       GPUOffScreen *offscreen = GPU_offscreen_create(
           region->winx, region->winy, false, false, NULL);
       if (!offscreen) {
+        WM_report(RPT_ERROR, "Region could not be drawn!");
         return;
       }



More information about the Bf-blender-cvs mailing list