PATCH: pyparted: Free c-strings on dealloc too

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In a couple of places we store strdup-ed C-strings in our python objects, free
these when the python objects get destroyed.
---
 src/pydevice.c  |    3 +++
 src/pydisk.c    |    1 +
 src/pyfilesys.c |    1 +
 src/pytimer.c   |   20 ++++++++++++++++++++
 4 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/src/pydevice.c b/src/pydevice.c
index f138271..e144096 100644
--- a/src/pydevice.c
+++ b/src/pydevice.c
@@ -68,6 +68,9 @@ PyObject *_ped_CHSGeometry_get(_ped_CHSGeometry *self, void *closure) {
 void _ped_Device_dealloc(_ped_Device *self) {
     PyObject_GC_UnTrack(self);

+    free(self->model);
+    free(self->path);
+
     Py_CLEAR(self->hw_geom);
     self->hw_geom = NULL;

diff --git a/src/pydisk.c b/src/pydisk.c
index c1c3228..27b8d95 100644
--- a/src/pydisk.c
+++ b/src/pydisk.c
@@ -287,6 +287,7 @@ int _ped_Disk_init(_ped_Disk *self, PyObject *args, PyObject *kwds) {
 /* _ped.DiskType functions */
 void _ped_DiskType_dealloc(_ped_DiskType *self) {
     PyObject_GC_UnTrack(self);
+    free(self->name);
     PyObject_GC_Del(self);
 }

diff --git a/src/pyfilesys.c b/src/pyfilesys.c
index 6923bd6..b184612 100644
--- a/src/pyfilesys.c
+++ b/src/pyfilesys.c
@@ -34,6 +34,7 @@
 /* _ped.FileSystemType functions */
 void _ped_FileSystemType_dealloc(_ped_FileSystemType *self) {
     PyObject_GC_UnTrack(self);
+    free(self->name);
     PyObject_GC_Del(self);
 }

diff --git a/src/pytimer.c b/src/pytimer.c
index 57fca34..2880a2a 100644
--- a/src/pytimer.c
+++ b/src/pytimer.c
@@ -31,6 +31,7 @@
 /* _ped.Timer functions */
 void _ped_Timer_dealloc(_ped_Timer *self) {
     PyObject_GC_UnTrack(self);
+    free(self->state_name);
     PyObject_GC_Del(self);
 }

@@ -64,6 +65,16 @@ int _ped_Timer_init(_ped_Timer *self, PyObject *args, PyObject *kwds) {
             return -2;
     }

+    /* self->state_name now points to the internal buffer of a PyString object,
+       which may be freed when its refcount drops to zero, so strdup it. */
+    if (self->state_name) {
+        self->state_name = strdup(self->state_name);
+        if (!self->state_name) {
+            PyErr_NoMemory();
+            return -3;
+        }
+    }
+
     return 0;
 }

@@ -123,6 +134,15 @@ int _ped_Timer_set(_ped_Timer *self, PyObject *value, void *closure) {
         if (PyErr_Occurred()) {
             return -1;
         }
+        /* self->state_name now points to the internal buffer of a PyString obj
+           which may be freed when its refcount drops to zero, so strdup it. */
+        if (self->state_name) {
+            self->state_name = strdup(self->state_name);
+            if (!self->state_name) {
+                PyErr_NoMemory();
+                return -2;
+            }
+        }
     } else {
PyErr_Format(PyExc_AttributeError, "_ped.Timer object has no attribute %s", member);
         return -1;
--
1.6.1.3

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux