Login
User Name:

Password:



Register

Forgot your password?
 I3 and IMC
Dec 26, 2024 3:27 am
By GatewaySysop
Hi - Clean SmaugFuss map/description issue..
Dec 15, 2024 7:29 pm
By Samson
AFKMud 2.2.4
Dec 10, 2024 4:09 pm
By Samson
Ubuntu 22.04.5 LTS
Dec 5, 2024 5:10 pm
By Remcon
SmaugFUSS 1.8/1.9
Nov 29, 2024 11:46 am
By Remcon
LOP 1.6
Author: Remcon
Submitted by: Remcon
SWFOTEFUSS 1.5.1
Author: Various
Submitted by: Samson
SWRFUSS 1.4.1
Author: Various
Submitted by: Samson
SmaugFUSS 1.9.5
Author: Various
Submitted by: Samson
AFKMud 2.2.4
Author: AFKMud Team
Submitted by: Samson
Users Online
There are currently no members online.

Members: 0
Guests: 21
Stats
Files
Topics
Posts
Members
Newest Member
496
3,808
19,708
594
MaisieMacl

Today's Birthdays
There are no member birthdays today.
» SmaugMuds » Bugfix Lists » AFKMud Bugfix List » [Bug:Editor] Crash when clear...
Forum Rules | Mark all | Recent Posts

[Bug:Editor] Crash when clearing an existing edit buffer.
< Newer Topic :: Older Topic > AFKMud 2.1.3

Pages:<< prev 1 next >>
Post is unread #1 Mar 7, 2010 9:52 pm   
Go to the top of the page
Go to the bottom of the page

Samson
Black Hand
GroupAdministrators
Posts3,697
JoinedJan 1, 2002

 
Bug: Crash when clearing an existing edit buffer.
Danger: High - Potential for a lot of data loss if the crash happens during a long building session where work hasn't been saved.
Discovered in: AFKMud 2.1.3
Found by: Materia
Fixed by: Materia

---

editor.cpp, char_data::edit_buffer

Locate:
      if( !str_cmp( cmd, "c" ) )
      {
         memset( edit, '\0', sizeof( editor_data ) );

         edit->numlines = 0;
         edit->on_line = 0;
         print( "Buffer cleared.\r\n> " );
         return;
      }


Change to:
      if( !str_cmp( cmd, "c" ) )
      {
         delete edit;
         edit = new editor_data;

         print( "Buffer cleared.\r\n> " );
         return;
      }


Locate:
               if( line == 0 && edit->numlines == 1 )
               {
                  memset( edit, '\0', sizeof( editor_data ) );

                  edit->numlines = 0;
                  edit->on_line = 0;
                  print( "Line deleted.\r\n> " );
                  return;
               }


Change to:
               if( line == 0 && edit->numlines == 1 )
               {
                  delete edit;
                  edit = new editor_data;

                  print( "Line deleted.\r\n> " );
                  return;
               }


This one is far more insidious, but will be obvious to anyone familiar with the behavior of memset and what that does in relation to things using the C++ STL, as the editor data does with std::string. The value for the std::string member of the editor_data struct gets blasted and is no longer valid because it has to be initialized with new.

Pages:<< prev 1 next >>