Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2022-04-13 02:52:19 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2022-04-13 02:52:50 +0300
commitcd4a9c488f66abccf3e35a33adbf2630a389ae67 (patch)
treefcffd7b1510bcdaadee5d7e292e6928f6849c5b7
parent9bc678969aaef5e2343d9362648e9a633d1b6e5e (diff)
Fix possible pointer being freed without being allocated in pygpu module
The `clear` method can be called before dealloc, which can mislead buffer ownership.
-rw-r--r--source/blender/python/gpu/gpu_py_buffer.c7
1 files changed, 5 insertions, 2 deletions
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);
}