]> granicus.if.org Git - python/commitdiff
The CF inheritance could cause double frees of the underlying objects.
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 15 Jul 2004 14:25:48 +0000 (14:25 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 15 Jul 2004 14:25:48 +0000 (14:25 +0000)
Fixed.

Mac/Modules/cf/_CFmodule.c
Mac/Modules/cf/cfsupport.py

index 85433319fc27ec8a48276c049bae28379e7847b6..04e1624443261f662a24984026103c9a3352f73a 100644 (file)
@@ -158,6 +158,7 @@ static void CFTypeRefObj_dealloc(CFTypeRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_free((PyObject *)self);
 }
@@ -519,6 +520,7 @@ static void CFArrayRefObj_dealloc(CFArrayRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -728,6 +730,7 @@ static void CFMutableArrayRefObj_dealloc(CFMutableArrayRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -966,6 +969,7 @@ static void CFDictionaryRefObj_dealloc(CFDictionaryRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -1157,6 +1161,7 @@ static void CFMutableDictionaryRefObj_dealloc(CFMutableDictionaryRefObject *self
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -1338,6 +1343,7 @@ static void CFDataRefObj_dealloc(CFDataRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -1561,6 +1567,7 @@ static void CFMutableDataRefObj_dealloc(CFMutableDataRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -1839,6 +1846,7 @@ static void CFStringRefObj_dealloc(CFStringRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -2564,6 +2572,7 @@ static void CFMutableStringRefObj_dealloc(CFMutableStringRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
@@ -2950,6 +2959,7 @@ static void CFURLRefObj_dealloc(CFURLRefObject *self)
        if (self->ob_freeit && self->ob_itself)
        {
                self->ob_freeit((CFTypeRef)self->ob_itself);
+               self->ob_itself = NULL;
        }
        self->ob_type->tp_base->tp_dealloc((PyObject *)self);
 }
index f236e6d374effa24a6d25594ec52d32ed07eaff9..95aeaa765f9c9049d378e91931a78f38151aa333 100644 (file)
@@ -273,6 +273,7 @@ class MyGlobalObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
                Output("if (self->ob_freeit && self->ob_itself)")
                OutLbrace()
                Output("self->ob_freeit((CFTypeRef)self->ob_itself);")
+               Output("self->ob_itself = NULL;")
                OutRbrace()
                
        def outputCompare(self):