[Bf-blender-cvs] [cd4a9c488f6] master: Fix possible pointer being freed without being allocated in pygpu module

Germano Cavalcante noreply at git.blender.org
Wed Apr 13 01:53:21 CEST 2022


Commit: cd4a9c488f66abccf3e35a33adbf2630a389ae67
Author: Germano Cavalcante
Date:   Tue Apr 12 20:52:19 2022 -0300
Branches: master
https://developer.blender.org/rBcd4a9c488f66abccf3e35a33adbf2630a389ae67

Fix possible pointer being freed without being allocated in pygpu module

The `clear` method can be called before dealloc, which can
mislead buffer ownership.

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

M	source/blender/python/gpu/gpu_py_buffer.c

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

diff --git a/source/blender/python/gpu/gpu_py_buffer.c b/source/blender/python/gpu/gpu_py_buffer.c
index 82c9f8f1f04..d3f55517ae7 100644
--- a/source/blender/python/gpu/gpu_py_buffer.c
+++ b/source/blender/python/gpu/gpu_py_buffer.c
@@ -277,7 +277,10 @@ static int pygpu_buffer__tp_traverse(BPyGPUBuffer *self, visitproc visit, void *
 
 static int pygpu_buffer__tp_clear(BPyGPUBuffer *self)
 {
-  Py_CLEAR(self->parent);
+  if (self->parent) {
+    Py_CLEAR(self->parent);
+    self->buf.as_void = NULL;
+  }
   return 0;
 }
 
@@ -287,7 +290,7 @@ static void pygpu_buffer__tp_dealloc(BPyGPUBuffer *self)
     PyObject_GC_UnTrack(self);
     Py_CLEAR(self->parent);
   }
-  else {
+  else if (self->buf.as_void) {
     MEM_freeN(self->buf.as_void);
   }



More information about the Bf-blender-cvs mailing list