Some of the setattr functions created a tuple to pass to the set* functions and didn't decref'ed it properly, "leaking" memory.

Commit approved by stivs.
This commit is contained in:
2005-06-17 05:10:14 +00:00
parent 2a640f03cd
commit 5f5844b95e
9 changed files with 202 additions and 161 deletions

View File

@@ -957,30 +957,43 @@ static PyObject *World_GetAttr( BPy_World * self, char *name )
static int World_SetAttr( BPy_World * self, char *name, PyObject * value )
{
PyObject *error=NULL;
PyObject *valtuple = Py_BuildValue( "(O)", value );
if( !valtuple )
return EXPP_ReturnIntError( PyExc_MemoryError,
"WorldSetAttr: couldn't parse args" );
if( strcmp( name, "name" ) == 0 )
World_setName( self, valtuple );
if( strcmp( name, "skytype" ) == 0 )
World_setSkytype( self, valtuple );
if( strcmp( name, "mode" ) == 0 )
World_setMode( self, valtuple );
if( strcmp( name, "mistype" ) == 0 )
World_setMistype( self, valtuple );
if( strcmp( name, "hor" ) == 0 )
World_setHor( self, valtuple );
if( strcmp( name, "zen" ) == 0 )
World_setZen( self, valtuple );
if( strcmp( name, "amb" ) == 0 )
World_setAmb( self, valtuple );
if( strcmp( name, "star" ) == 0 )
World_setStar( self, valtuple );
if( strcmp( name, "mist" ) == 0 )
World_setMist( self, valtuple );
return 0; /* normal exit */
else if( strcmp( name, "name" ) == 0 )
error = World_setName( self, valtuple );
else if( strcmp( name, "skytype" ) == 0 )
error = World_setSkytype( self, valtuple );
else if( strcmp( name, "mode" ) == 0 )
error = World_setMode( self, valtuple );
else if( strcmp( name, "mistype" ) == 0 )
error = World_setMistype( self, valtuple );
else if( strcmp( name, "hor" ) == 0 )
error = World_setHor( self, valtuple );
else if( strcmp( name, "zen" ) == 0 )
error = World_setZen( self, valtuple );
else if( strcmp( name, "amb" ) == 0 )
error = World_setAmb( self, valtuple );
else if( strcmp( name, "star" ) == 0 )
error = World_setStar( self, valtuple );
else if( strcmp( name, "mist" ) == 0 )
error = World_setMist( self, valtuple );
else {
Py_DECREF( valtuple );
return ( EXPP_ReturnIntError( PyExc_KeyError,
"attribute not found" ) );
}
Py_DECREF(valtuple);
if( error != Py_None )
return -1;
Py_DECREF( Py_None );
return 0;
}
/**