[Bf-blender-cvs] [5a957c02995] master: GPUShaderInterface: Fix use after free crash

Clément Foucault noreply at git.blender.org
Thu Aug 20 17:57:14 CEST 2020


Commit: 5a957c0299539f571029d7d96ff77367a596eff2
Author: Clément Foucault
Date:   Thu Aug 20 17:56:01 2020 +0200
Branches: master
https://developer.blender.org/rB5a957c0299539f571029d7d96ff77367a596eff2

GPUShaderInterface: Fix use after free crash

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

M	source/blender/gpu/opengl/gl_batch.cc
M	source/blender/gpu/opengl/gl_shader_interface.cc

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

diff --git a/source/blender/gpu/opengl/gl_batch.cc b/source/blender/gpu/opengl/gl_batch.cc
index 8dd4c6c21c0..9ca0a9f71db 100644
--- a/source/blender/gpu/opengl/gl_batch.cc
+++ b/source/blender/gpu/opengl/gl_batch.cc
@@ -171,10 +171,9 @@ void GLVaoCache::clear(void)
   }
 
   for (int i = 0; i < count; i++) {
-    if (interfaces[i] == NULL) {
-      continue;
+    if (interfaces[i] != NULL) {
+      const_cast<GLShaderInterface *>(interfaces[i])->ref_remove(this);
     }
-    const_cast<GLShaderInterface *>(interfaces[i])->ref_add(this);
   }
 
   if (is_dynamic_vao_count) {
diff --git a/source/blender/gpu/opengl/gl_shader_interface.cc b/source/blender/gpu/opengl/gl_shader_interface.cc
index ae292f6cc38..423db5c8c97 100644
--- a/source/blender/gpu/opengl/gl_shader_interface.cc
+++ b/source/blender/gpu/opengl/gl_shader_interface.cc
@@ -277,9 +277,9 @@ void GLShaderInterface::ref_add(GLVaoCache *ref)
 
 void GLShaderInterface::ref_remove(GLVaoCache *ref)
 {
-  for (auto *ref_iter : refs_) {
-    if (ref_iter == ref) {
-      ref_iter = NULL;
+  for (int i = 0; i < refs_.size(); i++) {
+    if (refs_[i] == ref) {
+      refs_[i] = NULL;
       break; /* cannot have duplicates */
     }
   }



More information about the Bf-blender-cvs mailing list