Login
User Name:

Password:



Register

Forgot your password?
 void nanny_get_new_race -- comm.c
Mar 13, 2025 7:08 am
By Elwood
IPv6
Jan 25, 2025 10:45 pm
By Samson
mudstrlcpy and mudstrlcat
Jan 18, 2025 5:23 pm
By Samson
I3 and IMC
Jan 17, 2025 9:35 pm
By Samson
AFKMud 2.5.1
Jan 17, 2025 2:22 pm
By Samson
SmaugFUSS 1.9.7
Author: Various
Submitted by: Samson
AFKMud 2.5.1
Author: AFKMud Team
Submitted by: Samson
Kayle's Weather Code for AFKMud
Author: Kayle
Submitted by: Samson
AFKMud 2.5.0
Author: AFKMud Team
Submitted by: Samson
SWFotEFUSS 1.5.2
Author: Various
Submitted by: Samson
Users Online
Anthropic, Meta, Bing, DotBot, AhrefsBot

Members: 0
Guests: 15
Stats
Files
Topics
Posts
Members
Newest Member
503
3,812
19,720
594
BiancaLowr

» SmaugMuds » Bugfix Lists » SWFOTE FUSS Bugfix List » [Bug] Memory leak in fread_obj
Forum Rules | Mark all | Recent Posts

[Bug] Memory leak in fread_obj
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Feb 4, 2010 5:11 pm   
Go to the top of the page
Go to the bottom of the page

InfiniteAxis
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:
               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 >>