Pages:<< prev 1 next >>
Off the Edge of the Map

GroupAdministrators
Posts1,199
JoinedMar 21, 2006
Bug: Memory leak in fread_obj
Danger: Medium - Leak only occurs on incomplete objects
Found by: Remcon
Fixed by: Remcon/Samson
---
save.c, fread_obj
Locate:
Replace with:
mud.h
Locate:
Below that, add:
The leak occurs because the code here in fread_obj only undoes the 3 strings, but an incomplete object may have much more data than this when DISPOSEd of and so calling free_obj ensures that all of the data is properly removed. This should only represent a problem if you have a bunch of incomplete objects laying about in your pfiles, but there's no sense in leaving the door open for leaks.
Danger: Medium - Leak only occurs on incomplete objects
Found by: Remcon
Fixed by: Remcon/Samson
---
save.c, fread_obj
Locate:
if( !fNest || !fVnum )
{
if( obj->name )
bug( "Fread_obj: %s incomplete object.", obj->name );
else
bug( "%s", "Fread_obj: incomplete object." );
if( obj->name )
STRFREE( obj->name );
if( obj->description )
STRFREE( obj->description );
if( obj->short_descr )
STRFREE( obj->short_descr );
DISPOSE( obj );
return;
}
Replace with:
if( !fNest || !fVnum )
{
if( obj->name )
bug( "%s: %s incomplete object.", __FUNCTION__, obj->name );
else
bug( "%s: incomplete object.", __FUNCTION__ );
free_obj( obj );
return;
}
mud.h
Locate:
/* handler.c */
Below that, add:
void free_obj( OBJ_DATA * obj );
The leak occurs because the code here in fread_obj only undoes the 3 strings, but an incomplete object may have much more data than this when DISPOSEd of and so calling free_obj ensures that all of the data is properly removed. This should only represent a problem if you have a bunch of incomplete objects laying about in your pfiles, but there's no sense in leaving the door open for leaks.
Pages:<< prev 1 next >>